ArgoCD dashboardにtailscale経由でアクセスする。

proxmox veの管理画面よろしくArgoCDのdashboardもtailscale経由で公開するのがちょうどよい感じがしたのでtailscale on k8sをセットアップする。


https://tailscale.com/kb/1185/kubernetes

tailscaleのドキュメントはこれ。

https://tailscale.com/kb/1236/kubernetes-operator

Kubernetes operatorのドキュメントはこれ。


Kubernetes operatorを使用する。

https://github.com/tailscale/tailscale/blob/main/cmd/k8s-operator/deploy/chart/values.yaml

helmの設定値は↑で確認することができる。


まず、https://login.tailscale.com/admin/acls/file でTailnetに対するACLを変更する。k8s関連のタグを追加する。

次に、https://login.tailscale.com/admin/settings/oauth でOAuth Clientを設定する。このOAuth Clientの設定はKubernetes ClusterがTailscaleのリソースを操作するために必要。


dependencies:
- name: tailscale-operator
version: 1.72.0
repository: https://pkgs.tailscale.com/helmcharts

Chart.yamlにtailscale-operatorに関する情報を記述し、

https://github.com/tailscale/tailscale/blob/c4fb380f3c5f672ed11753c4771365ac3d43b14d/cmd/k8s-operator/deploy/manifests/operator.yaml#L9-L16

のSecretだけはSealed Secret化してからdeployする。


kubectl create secret generic operator-oauth --dry-run=client --from-literal=client_id=xxxxx --from-literal=client_secret=yyyyy -o yaml > operator-oauth-secret.yaml

kubeseal --namespace tailscale -f operator-oauth-secret.yaml -w operator-oauth-sealed-secret.yaml --controller-name sealed-secrets-app --controller-namespace sealed-secrets


正常に起動するとPodのlogに以下のように表示される

YYYY/MM/DD hh:mm:ss tsnet starting with hostname "tailscale-operator", varRoot "/root/.config/tsnet-operator"
YYYY/MM/DD hh:mm:ss LocalBackend state is NeedsLogin; running StartLoginInteractive...
YYYY/MM/DD hh:mm:ss AuthLoop: state is Starting; done

https://login.tailscale.com/admin/machines

更に↑のmachine欄でtailscale-operatorがtailnetに参加していることを確認することができる。


https://tailscale.com/kb/1437/kubernetes-operator-api-server-proxy

tailnet経由でkube-api-serverにアクセスするために上記ページのセットアップを行う。

// k8s operator
{"action": "accept", "src": ["tag:k8s-readers"], "dst": ["tag:k8s-operator:443"]},

access controlのaclsのセクションに上記を追加する。tagsのセクションにもk8s-readersを追加しておく。

更に、Machines一覧でkube-api-serverに接続する予定のPCに対してk8s-readersを適用する。


kubectl create clusterrolebinding tailnet-readers \
--group="tag:k8s-readers" \
--clusterrole=view \
--dry-run=client \
-o yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
creationTimestamp: null
name: tailnet-readers
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group

tailnet用のcrbも作成しておく。


https://tailscale.com/kb/1080/cli?tab=macos

mac OSにtailscale CLIをinstallする方法はこれ。tailscale自体をinstallしてあればCLI integrationとして簡単にinstallすることができる。


tailscale configure kubeconfig <operator-hostname>

operator-hostnameはdefaultでhelm chartをinstallしていればtailscale-operator

ref. https://github.com/tailscale/tailscale/blob/118206ab7909f0d716b9e2067ffbd987872f979f/cmd/k8s-operator/deploy/chart/values.yaml#L49C14-L49C32


kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* tailscale-operator.xxx.ts.net tailscale-operator.xxx.ts.net tailscale-auth

となっていることが確認できる。

この状態ではmax OSのtailscaleをoffにするとkubectlコマンドが通らなくなることがわかる。

更に、この場合はtag:k8s-readersのGroupにImpersonateしているためview相当の操作しか行うことができない。

Related Articles