Kubernetes 集群配置使用 Argo Tunnel

按照 Cloudflare 文章的说法, Argo Tunnel 的 Ingress Controller 在 2019 年年底已经停止维护, 建议用户使用 Sidecar 的方式使用 Argo Tunnel, 所以这里使用 Sidecar 的方式进行部署.

配置 Cert 文件

初次使用时, 首先需要将 Cloudflare 的证书文件转换为 Kubernetes Secret.

生成 Cert 文件

下载页面下载 cloudflared 文件, 或在 Linux 系统中使用命令行直接安装

1
curl https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-darwin-amd64.tgz | tar xzC /usr/local/bin

Mac 系统也可使用 brew 安装

1
brew install cloudflare/cloudflare/cloudflared

接着使用登录指令绑定账号

1
cloudflared tunnel login

按照提示进行, 完成后证书将会被保存在 ~/.cloudflared/cert.pem 文件中.

转换 Cert 文件为 Secret

例如我们将绑定域名为 xiaolanglang.net, 则命令为:

1
kubectl create secret generic xiaolanglang.net --from-file="$HOME/.cloudflared/cert.pem"

配置 Deployment 文件

我们将之前的配置文件修改如下:

echo-deploy.yml

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: echo
name: echo
spec:
replicas: 1
selector:
matchLabels:
app: echo
template:
metadata:
labels:
app: echo
spec:
containers:
- name: echo
image: k8s.gcr.io/echoserver:1.10
imagePullPolicy: Always
ports:
- containerPort: 8080
resources:
limits:
cpu: 10m
memory: 20Mi
requests:
cpu: 10m
memory: 20Mi
- name: tunnel
image: docker.io/cloudflare/cloudflared:2020.8.0
imagePullPolicy: Always
command: ["cloudflared", "tunnel"]
args:
- --url=http://127.0.0.1:8080
- --hostname=echo.xiaolanglang.net
- --origincert=/etc/cloudflared/cert.pem
- --no-autoupdate
resources:
limits:
cpu: 10m
memory: 20Mi
requests:
cpu: 10m
memory: 20Mi
volumeMounts:
- mountPath: /etc/cloudflared
name: tunnel-secret
readOnly: true
volumes:
- name: tunnel-secret
secret:
secretName: xiaolanglang.net
nodeSelector:
network: proxy
terminationGracePeriodSeconds: 60

验证结果

当节点启动后, 使用浏览器访问 echo.xiaolanglang.net 即可获得响应信息.