Tailscale Kubernetes operator
Kubernetes Operator 目前处于测试阶段。
预先准备
- 添加tailnet策略,创建对应的标签:
1
2
3
4
| "tagOwners": {
"tag:k8s-operator": [],
"tag:k8s": ["tag:k8s-operator"],
},
|
添加步骤如下所示,点击直达:

- 添加oauth客户端,点击直达

勾选devices
的读写权限,并添加上一个步骤添加的tag,点击生成oauth client secret,记住Client ID
和Client secret
,后面要用到.
使用helm安装operator
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # 添加tailscale仓库
helm repo add tailscale https://pkgs.tailscale.com/helmcharts
# 更新本地helm缓存
helm repo update
# 安装operator
helm upgrade \
--install \
tailscale-operator \
tailscale/tailscale-operator \
--namespace=tailscale \
--create-namespace \
--set-string oauth.clientId=<OAauth client ID> \
--set-string oauth.clientSecret=<OAuth client secret> \
--set-string apiServerProxyConfig.mode="noauth" \
--wait
|
⚠️注意替换上面的<OAauth client ID>
和<OAuth client secret>
等个十几二十秒,查看operator的状态:
1
2
3
4
| kubectl get po -n tailscale
# 示例输出,正常运行就是没问题
NAME READY STATUS RESTARTS AGE
operator-5db569fdfc-xkqkh 1/1 Running 0 2m36s
|
这时候打开tailscale的页面,可以看到operator已经被成功加进来了,点击直达:

使用示例
创建一个kuard测试pod:
1
| kubectl run kuard -l app=kuard --image 163751/kuard:green
|
创建一个svc暴露端口到tailnet上:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| kubectl apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
name: kuard-tailscale-svc
annotations:
tailscale.com/expose: "true"
labels:
app: kuard
spec:
ports:
- port: 8080
protocol: TCP
name: kuard
selector:
app: kuard
type: ClusterIP
EOF
# 或者通过ingress进行暴露
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kuard-ingress
spec:
defaultBackend:
service:
name: kuard-tailscale-svc
port:
number: 8080
ingressClassName: tailscale
EOF
# 获取ingress
kubectl get ingress
# 示例输出
NAME CLASS HOSTS ADDRESS PORTS AGE
kuard-ingress tailscale * default-kuard-ingress-ingress.tail2add5.ts.net 80 33s
# 此时直接通过后面的address即可访问服务。
|
关键点是上面的注解tailscale.com/expose: "true"
,Tailscale operator会自动创建一个对应的statefulset
和service
,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| kubectl get all -n tailscale
# 示例输出
NAME READY STATUS RESTARTS AGE
pod/operator-5db569fdfc-xkqkh 1/1 Running 0 130m
pod/ts-kuard-tailscale-svc-b8f2m-0 1/1 Running 0 2m58s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ts-kuard-tailscale-svc-b8f2m ClusterIP None <none> <none> 3m17s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/operator 1/1 1 1 135m
NAME DESIRED CURRENT READY AGE
replicaset.apps/operator-5db569fdfc 1 1 1 135m
NAME READY AGE
statefulset.apps/ts-kuard-tailscale-svc-b8f2m 1/1 3m15s
|
接着打开tailscale的页面,可以看到新的服务已经被成功加进来了,点击直达:

这时,通过其他任意一个客户端连接tailscale VPN即可访问该服务。

如果想要通过域名访问,可以通过设置MagicDNS来实现,具体设置在tailscale后台,DNS --> 最下面的MagicDNS
启用即可,如果想要开启https,那么把下面的HTTPS Certificates
也打开即可.
点开服务详情,可以看到完整的域名,如下:

此时打开这个分配的域名加8080端口就可以正常访问服务,域名命名规则为命名空间-服务名-DNS Tailnet name
,如果你无法解析该域名,可能是DNS没有配置,需要配置DNS为100.100.100.100
,具体以页面上的为准.

参考链接