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,具体以页面上的为准.

参考链接