大家知道,我有一个用于查看 IPv4 和 IPv6 地址的站点 https://ip.bun.plus。
最近切换成 k3s 后,发现获取到的 X-Forwarded-For
和 X-Real-Ip
都是集群内网的地址。在网上搜索后发现有很多人在问。
首先按 traefik 文档 Forwarded Headers,配置 trafik 始终转发 Forwarded 头。编辑或新建 /var/lib/rancher/k3s/server/manifests/traefik-config.yaml
文件:
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: traefik
namespace: kube-system
spec:
valuesContent: |-
additionalArguments:
- "--entryPoints.web.forwardedHeaders.insecure"
加入 --entryPoints.web.forwardedHeaders.insecure
后,等待 traefik 应用配置,也试了重启 k3s、重启宿主机,都没有效果。
然后经过了各种尝试(详见后文“大无语事件”部分)。
最后在 @Kevin 的帮助下,才发现应该为 traefik 设置 externalTrafficPolicy: Local
。仍然编辑 /var/lib/rancher/k3s/server/manifests/traefik-config.yaml
文件:
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: traefik
namespace: kube-system
spec:
valuesContent: |-
additionalArguments:
- "--entryPoints.web.forwardedHeaders.insecure"
# 追加下面的内容
service:
spec:
externalTrafficPolicy: Local
k8s文档介绍了 externalTrafficPolicy: Local
的用途和弊端。