blob: e0b870374db8b1fbafa38c58eb12364427623213 [file] [log] [blame]
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +04001input: {
2 subdomain: string
Giorgi Lekveishvili9d5e3f52024-03-13 15:02:50 +04003 ipSubnet: string
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +04004}
5
Giorgi Lekveishvili03d6f4b2024-03-08 13:05:21 +04006name: "headscale"
Giorgi Lekveishvili08af67a2024-01-18 08:53:05 +04007namespace: "app-headscale"
giod809aa72024-04-26 14:11:06 +04008icon: "<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 Lekveishvili08af67a2024-01-18 08:53:05 +04009
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040010images: {
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
25charts: {
Giorgi Lekveishvili0c6b3242024-03-14 15:31:08 +040026 oauth2Client: {
27 chart: "charts/oauth2-client"
28 sourceRef: {
29 kind: "GitRepository"
30 name: "pcloud"
31 namespace: global.id
32 }
33 }
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040034 headscale: {
35 chart: "charts/headscale"
36 sourceRef: {
37 kind: "GitRepository"
38 name: "pcloud"
39 namespace: global.id
40 }
41 }
42}
43
Giorgi Lekveishvili0c6b3242024-03-14 15:31:08 +040044_domain: "\(input.subdomain).\(global.domain)"
45_oauth2ClientSecretName: "oauth2-client"
46
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040047helm: {
Giorgi Lekveishvili0c6b3242024-03-14 15:31:08 +040048 "oauth2-client": {
49 chart: charts.oauth2Client
50 // TODO(gio): remove once hydra maester is installed as part of dodo itself
Giorgi Lekveishvilia09fad72024-03-21 15:24:35 +040051 dependsOn: [{
Giorgi Lekveishvili0c6b3242024-03-14 15:31:08 +040052 name: "auth"
53 namespace: "\(global.namespacePrefix)core-auth"
54 }]
55 values: {
56 name: "oauth2-client"
57 secretName: _oauth2ClientSecretName
58 grantTypes: ["authorization_code"]
59 responseTypes: ["code"]
60 scope: "openid profile email"
61 redirectUris: ["https://\(_domain)/oidc/callback"]
62 hydraAdmin: "http://hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local"
63 }
64 }
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040065 headscale: {
66 chart: charts.headscale
Giorgi Lekveishvilia09fad72024-03-21 15:24:35 +040067 dependsOn: [{
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040068 name: "auth"
69 namespace: "\(global.namespacePrefix)core-auth"
70 }]
71 values: {
72 image: {
73 repository: images.headscale.fullName
74 tag: images.headscale.tag
75 pullPolicy: images.headscale.pullPolicy
76 }
77 storage: size: "5Gi"
gioe72b54f2024-04-22 10:44:41 +040078 ingressClassName: ingressPublic
79 certificateIssuer: issuerPublic
Giorgi Lekveishvili0c6b3242024-03-14 15:31:08 +040080 domain: _domain
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040081 publicBaseDomain: global.domain
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040082 ipAddressPool: "\(global.id)-headscale"
Giorgi Lekveishvili0c6b3242024-03-14 15:31:08 +040083 oauth2: {
84 secretName: _oauth2ClientSecretName
85 issuer: "https://hydra.\(global.domain)"
86 }
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040087 api: {
88 port: 8585
Giorgi Lekveishvili9d5e3f52024-03-13 15:02:50 +040089 ipSubnet: input.ipSubnet
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040090 image: {
91 repository: images.api.fullName
92 tag: images.api.tag
93 pullPolicy: images.api.pullPolicy
94 }
95 }
96 ui: enabled: false
97 }
98 }
99}
gio09a3e5b2024-04-26 14:11:06 +0400100
101help: [{
102 title: "Install"
103 contents: """
104 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.
105 """
106 children: [{
107 title: "Widnows with MSI"
108 contents: "[https://tailscale.com/kb/1189/install-windows-msi](https://tailscale.com/kb/1189/install-windows-msi)"
109 }]
110}, {
111 title: "Configure Login URL"
112 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"
113 children: [{
114 title: "macOS"
gio1a20cbd2024-05-26 16:32:41 +0400115 contents: "[https://headscale.\(global.domain)/apple](https://headscale.\(global.domain)/apple)"
gio09a3e5b2024-04-26 14:11:06 +0400116 }, {
117 title: "iOS"
gio1a20cbd2024-05-26 16:32:41 +0400118 contents: "[https://headscale.\(global.domain)/apple](https://headscale.\(global.domain)/apple)"
gio09a3e5b2024-04-26 14:11:06 +0400119 }, {
120 title: "Windows"
121 contents: "[https://tailscale.com/kb/1318/windows-mdm](https://tailscale.com/kb/1318/windows-mdm)"
122 }, {
123 title: "Linux"
124 contents: "tailscale up --login-server https://\(_domain)"
125 }, {
126 title: "Android"
127 contents: """
128 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)
129
130 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)
131
132 After saving and restarting the app, selecting the regular Sign in option should open up the dodo: authentication page.
133 """
134 }, {
135 title: "Command Line"
136 contents: "tailscale up --login-server https://\(_domain)"
137 }]
138}]