blob: 9bb23957551d46b03cd7306cd48dd490560fa83b [file] [log] [blame]
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +04001input: {
gio9bd87ca2025-04-20 08:05:34 +04002 network: #Network
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +04003 subdomain: string
gio9bd87ca2025-04-20 08:05:34 +04004 ipSubnet: string
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +04005}
6
gio9bd87ca2025-04-20 08:05:34 +04007name: "headscale"
Giorgi Lekveishvili08af67a2024-01-18 08:53:05 +04008namespace: "app-headscale"
gio9bd87ca2025-04-20 08:05:34 +04009icon: "<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='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='38' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/></svg>"
Giorgi Lekveishvili08af67a2024-01-18 08:53:05 +040010
gio9bd87ca2025-04-20 08:05:34 +040011_domain: "\(input.subdomain).\(input.network.domain)"
Giorgi Lekveishvili0c6b3242024-03-14 15:31:08 +040012_oauth2ClientSecretName: "oauth2-client"
13
gio7fbd4ad2024-08-27 10:06:39 +040014out: {
15 images: {
16 headscale: {
17 repository: "headscale"
gio9bd87ca2025-04-20 08:05:34 +040018 name: "headscale"
19 tag: "0.25.1"
gio7fbd4ad2024-08-27 10:06:39 +040020 pullPolicy: "IfNotPresent"
21 }
22 api: {
23 repository: "giolekva"
gio9bd87ca2025-04-20 08:05:34 +040024 name: "headscale-api"
25 tag: "latest"
gio7fbd4ad2024-08-27 10:06:39 +040026 pullPolicy: "Always"
Giorgi Lekveishvili0c6b3242024-03-14 15:31:08 +040027 }
28 }
gio7fbd4ad2024-08-27 10:06:39 +040029
30 charts: {
31 oauth2Client: {
gio9bd87ca2025-04-20 08:05:34 +040032 kind: "GitRepository"
gio7fbd4ad2024-08-27 10:06:39 +040033 address: "https://code.v1.dodo.cloud/helm-charts"
gio9bd87ca2025-04-20 08:05:34 +040034 branch: "main"
35 path: "charts/oauth2-client"
gio7fbd4ad2024-08-27 10:06:39 +040036 }
37 headscale: {
gio9bd87ca2025-04-20 08:05:34 +040038 kind: "GitRepository"
gio7fbd4ad2024-08-27 10:06:39 +040039 address: "https://code.v1.dodo.cloud/helm-charts"
gio9bd87ca2025-04-20 08:05:34 +040040 branch: "main"
41 path: "charts/headscale"
gio7fbd4ad2024-08-27 10:06:39 +040042 }
43 }
44
45 helm: {
46 "oauth2-client": {
47 chart: charts.oauth2Client
48 // TODO(gio): remove once hydra maester is installed as part of dodo itself
49 dependsOn: [{
gio9bd87ca2025-04-20 08:05:34 +040050 name: "auth"
gio7fbd4ad2024-08-27 10:06:39 +040051 namespace: "\(global.namespacePrefix)core-auth"
52 }]
53 values: {
gio9bd87ca2025-04-20 08:05:34 +040054 name: "\(release.namespace)-headscale"
Giorgi Lekveishvili0c6b3242024-03-14 15:31:08 +040055 secretName: _oauth2ClientSecretName
gio7fbd4ad2024-08-27 10:06:39 +040056 grantTypes: ["authorization_code"]
57 responseTypes: ["code"]
58 scope: "openid profile email"
59 redirectUris: ["https://\(_domain)/oidc/callback"]
60 hydraAdmin: "http://hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local"
Giorgi Lekveishvili0c6b3242024-03-14 15:31:08 +040061 }
gio7fbd4ad2024-08-27 10:06:39 +040062 }
63 headscale: {
64 chart: charts.headscale
65 dependsOn: [{
gio9bd87ca2025-04-20 08:05:34 +040066 name: "auth"
gio7fbd4ad2024-08-27 10:06:39 +040067 namespace: "\(global.namespacePrefix)core-auth"
68 }]
69 values: {
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040070 image: {
gio7fbd4ad2024-08-27 10:06:39 +040071 repository: images.headscale.fullName
gio9bd87ca2025-04-20 08:05:34 +040072 tag: images.headscale.tag
gio7fbd4ad2024-08-27 10:06:39 +040073 pullPolicy: images.headscale.pullPolicy
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040074 }
gio7fbd4ad2024-08-27 10:06:39 +040075 storage: size: "5Gi"
gio9bd87ca2025-04-20 08:05:34 +040076 ingressClassName: input.network.ingressClass
gio7fbd4ad2024-08-27 10:06:39 +040077 certificateIssuer: input.network.certificateIssuer
gio9bd87ca2025-04-20 08:05:34 +040078 domain: _domain
79 publicBaseDomain: input.network.domain
80 ipAddressPool: "\(global.id)-headscale"
gio7fbd4ad2024-08-27 10:06:39 +040081 oauth2: {
82 secretName: _oauth2ClientSecretName
gio9bd87ca2025-04-20 08:05:34 +040083 issuer: "https://hydra.\(input.network.domain)"
gio7fbd4ad2024-08-27 10:06:39 +040084 }
85 api: {
gio9bd87ca2025-04-20 08:05:34 +040086 port: 8585
87 ipSubnet: input.ipSubnet
88 self: "http://headscale-api.\(release.namespace).svc.cluster"
gio2f9ed202024-10-06 17:47:00 +040089 fetchUsersAddr: "http://memberships-api.\(global.namespacePrefix)core-auth-memberships.svc.cluster.local/api/users"
gio7fbd4ad2024-08-27 10:06:39 +040090 image: {
91 repository: images.api.fullName
gio9bd87ca2025-04-20 08:05:34 +040092 tag: images.api.tag
gio7fbd4ad2024-08-27 10:06:39 +040093 pullPolicy: images.api.pullPolicy
94 }
95 }
96 ui: enabled: false
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040097 }
Giorgi Lekveishvilie009a5d2024-01-05 14:10:11 +040098 }
99 }
100}
gio09a3e5b2024-04-26 14:11:06 +0400101
102help: [{
gio9bd87ca2025-04-20 08:05:34 +0400103 title: "Install"
gio09a3e5b2024-04-26 14:11:06 +0400104 contents: """
105 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.
106 """
107 children: [{
gio9bd87ca2025-04-20 08:05:34 +0400108 title: "Widnows with MSI"
gio09a3e5b2024-04-26 14:11:06 +0400109 contents: "[https://tailscale.com/kb/1189/install-windows-msi](https://tailscale.com/kb/1189/install-windows-msi)"
110 }]
111}, {
gio9bd87ca2025-04-20 08:05:34 +0400112 title: "Configure Login URL"
gio09a3e5b2024-04-26 14:11:06 +0400113 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"
114 children: [{
gio9bd87ca2025-04-20 08:05:34 +0400115 title: "macOS"
gio7841f4f2024-07-26 19:53:49 +0400116 contents: "[https://headscale.\(input.network.domain)/apple](https://headscale.\(input.network.domain)/apple)"
gio09a3e5b2024-04-26 14:11:06 +0400117 }, {
gio9bd87ca2025-04-20 08:05:34 +0400118 title: "iOS"
gio7841f4f2024-07-26 19:53:49 +0400119 contents: "[https://headscale.\(input.network.domain)/apple](https://headscale.\(input.network.domain)/apple)"
gio09a3e5b2024-04-26 14:11:06 +0400120 }, {
gio9bd87ca2025-04-20 08:05:34 +0400121 title: "Windows"
gio09a3e5b2024-04-26 14:11:06 +0400122 contents: "[https://tailscale.com/kb/1318/windows-mdm](https://tailscale.com/kb/1318/windows-mdm)"
123 }, {
gio9bd87ca2025-04-20 08:05:34 +0400124 title: "Linux"
gio09a3e5b2024-04-26 14:11:06 +0400125 contents: "tailscale up --login-server https://\(_domain)"
126 }, {
gio9bd87ca2025-04-20 08:05:34 +0400127 title: "Android"
gio09a3e5b2024-04-26 14:11:06 +0400128 contents: """
129 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)
130
131 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)
132
133 After saving and restarting the app, selecting the regular Sign in option should open up the dodo: authentication page.
134 """
135 }, {
gio9bd87ca2025-04-20 08:05:34 +0400136 title: "Command Line"
gio09a3e5b2024-04-26 14:11:06 +0400137 contents: "tailscale up --login-server https://\(_domain)"
138 }]
139}]