| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 1 | input: { |
| 2 | subdomain: string |
| Giorgi Lekveishvili | 9d5e3f5 | 2024-03-13 15:02:50 +0400 | [diff] [blame] | 3 | ipSubnet: string |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 4 | } |
| 5 | |
| Giorgi Lekveishvili | 03d6f4b | 2024-03-08 13:05:21 +0400 | [diff] [blame] | 6 | name: "headscale" |
| Giorgi Lekveishvili | 08af67a | 2024-01-18 08:53:05 +0400 | [diff] [blame] | 7 | namespace: "app-headscale" |
| gio | d809aa7 | 2024-04-26 14:11:06 +0400 | [diff] [blame] | 8 | icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><circle cx='24' cy='24' r='4.5' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='24' r='4.5' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='10' r='4.5' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='10' r='4.5' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='10' r='4.5' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='24' r='4.5' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='38' r='4.5' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='38' r='4.5' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='38' r='4.5' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='38' r='2' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='24' r='2' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='24' r='2' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='24' r='2' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'/></svg>" |
| Giorgi Lekveishvili | 08af67a | 2024-01-18 08:53:05 +0400 | [diff] [blame] | 9 | |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 10 | images: { |
| 11 | headscale: { |
| 12 | repository: "headscale" |
| 13 | name: "headscale" |
| 14 | tag: "0.22.3" |
| 15 | pullPolicy: "IfNotPresent" |
| 16 | } |
| 17 | api: { |
| 18 | repository: "giolekva" |
| 19 | name: "headscale-api" |
| 20 | tag: "latest" |
| 21 | pullPolicy: "Always" |
| 22 | } |
| 23 | } |
| 24 | |
| 25 | charts: { |
| Giorgi Lekveishvili | 0c6b324 | 2024-03-14 15:31:08 +0400 | [diff] [blame] | 26 | oauth2Client: { |
| gio | f884341 | 2024-05-22 16:38:05 +0400 | [diff] [blame^] | 27 | kind: "GitRepository" |
| 28 | address: "https://github.com/giolekva/pcloud.git" |
| 29 | branch: "main" |
| 30 | path: "charts/oauth2-client" |
| Giorgi Lekveishvili | 0c6b324 | 2024-03-14 15:31:08 +0400 | [diff] [blame] | 31 | } |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 32 | headscale: { |
| gio | f884341 | 2024-05-22 16:38:05 +0400 | [diff] [blame^] | 33 | kind: "GitRepository" |
| 34 | address: "https://github.com/giolekva/pcloud.git" |
| 35 | branch: "main" |
| 36 | path: "charts/headscale" |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 37 | } |
| 38 | } |
| 39 | |
| Giorgi Lekveishvili | 0c6b324 | 2024-03-14 15:31:08 +0400 | [diff] [blame] | 40 | _domain: "\(input.subdomain).\(global.domain)" |
| 41 | _oauth2ClientSecretName: "oauth2-client" |
| 42 | |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 43 | helm: { |
| Giorgi Lekveishvili | 0c6b324 | 2024-03-14 15:31:08 +0400 | [diff] [blame] | 44 | "oauth2-client": { |
| 45 | chart: charts.oauth2Client |
| 46 | // TODO(gio): remove once hydra maester is installed as part of dodo itself |
| Giorgi Lekveishvili | a09fad7 | 2024-03-21 15:24:35 +0400 | [diff] [blame] | 47 | dependsOn: [{ |
| Giorgi Lekveishvili | 0c6b324 | 2024-03-14 15:31:08 +0400 | [diff] [blame] | 48 | name: "auth" |
| 49 | namespace: "\(global.namespacePrefix)core-auth" |
| 50 | }] |
| 51 | values: { |
| 52 | name: "oauth2-client" |
| 53 | secretName: _oauth2ClientSecretName |
| 54 | grantTypes: ["authorization_code"] |
| 55 | responseTypes: ["code"] |
| 56 | scope: "openid profile email" |
| 57 | redirectUris: ["https://\(_domain)/oidc/callback"] |
| 58 | hydraAdmin: "http://hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local" |
| 59 | } |
| 60 | } |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 61 | headscale: { |
| 62 | chart: charts.headscale |
| Giorgi Lekveishvili | a09fad7 | 2024-03-21 15:24:35 +0400 | [diff] [blame] | 63 | dependsOn: [{ |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 64 | name: "auth" |
| 65 | namespace: "\(global.namespacePrefix)core-auth" |
| 66 | }] |
| 67 | values: { |
| 68 | image: { |
| 69 | repository: images.headscale.fullName |
| 70 | tag: images.headscale.tag |
| 71 | pullPolicy: images.headscale.pullPolicy |
| 72 | } |
| 73 | storage: size: "5Gi" |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 74 | ingressClassName: ingressPublic |
| 75 | certificateIssuer: issuerPublic |
| Giorgi Lekveishvili | 0c6b324 | 2024-03-14 15:31:08 +0400 | [diff] [blame] | 76 | domain: _domain |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 77 | publicBaseDomain: global.domain |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 78 | ipAddressPool: "\(global.id)-headscale" |
| Giorgi Lekveishvili | 0c6b324 | 2024-03-14 15:31:08 +0400 | [diff] [blame] | 79 | oauth2: { |
| 80 | secretName: _oauth2ClientSecretName |
| 81 | issuer: "https://hydra.\(global.domain)" |
| 82 | } |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 83 | api: { |
| 84 | port: 8585 |
| Giorgi Lekveishvili | 9d5e3f5 | 2024-03-13 15:02:50 +0400 | [diff] [blame] | 85 | ipSubnet: input.ipSubnet |
| Giorgi Lekveishvili | e009a5d | 2024-01-05 14:10:11 +0400 | [diff] [blame] | 86 | image: { |
| 87 | repository: images.api.fullName |
| 88 | tag: images.api.tag |
| 89 | pullPolicy: images.api.pullPolicy |
| 90 | } |
| 91 | } |
| 92 | ui: enabled: false |
| 93 | } |
| 94 | } |
| 95 | } |
| gio | 09a3e5b | 2024-04-26 14:11:06 +0400 | [diff] [blame] | 96 | |
| 97 | help: [{ |
| 98 | title: "Install" |
| 99 | contents: """ |
| 100 | You can install Tailscale client on any of your personal devices running: macOS, iOS, Windows, Lonux or Android. Installer packages can be found at: [https://tailscale.com/download](https://tailscale.com/download). After installing the client application you need to configure it to use https://\(_domain) as a login URL, so you can login to the VPN network with your dodo: account. See "Configure Login URL" section below for more details. |
| 101 | """ |
| 102 | children: [{ |
| 103 | title: "Widnows with MSI" |
| 104 | contents: "[https://tailscale.com/kb/1189/install-windows-msi](https://tailscale.com/kb/1189/install-windows-msi)" |
| 105 | }] |
| 106 | }, { |
| 107 | title: "Configure Login URL" |
| 108 | contents: "After installing the client application you need to configure it to use https://\(_domain) as a login URL, so you can login to the VPN network with your dodo: account" |
| 109 | children: [{ |
| 110 | title: "macOS" |
| gio | 1a20cbd | 2024-05-26 16:32:41 +0400 | [diff] [blame] | 111 | contents: "[https://headscale.\(global.domain)/apple](https://headscale.\(global.domain)/apple)" |
| gio | 09a3e5b | 2024-04-26 14:11:06 +0400 | [diff] [blame] | 112 | }, { |
| 113 | title: "iOS" |
| gio | 1a20cbd | 2024-05-26 16:32:41 +0400 | [diff] [blame] | 114 | contents: "[https://headscale.\(global.domain)/apple](https://headscale.\(global.domain)/apple)" |
| gio | 09a3e5b | 2024-04-26 14:11:06 +0400 | [diff] [blame] | 115 | }, { |
| 116 | title: "Windows" |
| 117 | contents: "[https://tailscale.com/kb/1318/windows-mdm](https://tailscale.com/kb/1318/windows-mdm)" |
| 118 | }, { |
| 119 | title: "Linux" |
| 120 | contents: "tailscale up --login-server https://\(_domain)" |
| 121 | }, { |
| 122 | title: "Android" |
| 123 | contents: """ |
| 124 | After opening the app, the kebab menu icon (three dots) on the top bar on the right must be repeatedly opened and closed until the Change server option appears in the menu. This is where you can enter your headscale URL: https://\(_domain) |
| 125 | |
| 126 | A screen recording of this process can be seen in the tailscale-android PR which implemented this functionality: [https://github.com/tailscale/tailscale-android/pull/55](https://github.com/tailscale/tailscale-android/pull/55) |
| 127 | |
| 128 | After saving and restarting the app, selecting the regular Sign in option should open up the dodo: authentication page. |
| 129 | """ |
| 130 | }, { |
| 131 | title: "Command Line" |
| 132 | contents: "tailscale up --login-server https://\(_domain)" |
| 133 | }] |
| 134 | }] |