k3s中使用的Traefik可以被代理,只需要在Traefik配置中添加proxyProtocol设置即可。具体步骤如下:
- 修改k3s server配置文件 /etc/rancher/k3s/k3s.yaml 中的kubeconfig内容为:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <ca.crt>
server: https://<k3s_url>:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
username: admin
password: <k3s_token>
- 进入k3s集群内Traefik所在的命名空间(一般为kube-system),修改Traefik deployment的yaml文件,并添加如下配置:
- name: TRAEFIK_PROXY_PROTOCOL
value: "true"
- 重新部署Traefik,并检查是否已经添加了代理协议:
$ kubectl apply -f traefik-deployment.yaml -n kube-system
$ kubectl describe pod traefik-xxxxx -n kube-system
如果输出中没有相关的错误信息,则表示配置成功。
- 最后,在代理服务器上配置转发规则即可。例如,使用nginx进行转发:
server {
listen 80;
server_name example.com;
location / {
# 转发到Traefik所在的节点IP和端口
proxy_pass http://<k3s_node_ip>:<traefik_port>;
proxy_protocol on; # 开启代理协议
}
}