小迅的神奇海螺

k3s让traefik获取真实IP

2023-03-28

思路

  • 配置externalTrafficPolicy: Local,使得流量走本地
  • 直接绑定本地端口
    • 由于绑定了本地端口,所以自带的servicelb组件也就失去了作用,可以禁用它

以上方法二选一,第二种会更稳定

配置

以下操作在k3s环境下进行

  • 对自带的traefik进行自定义配置

通过创建一个名为/var/lib/rancher/k3s/server/manifests/traefik-config.yaml的文件,对自带的traefik进行自定义配置

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
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    deployment:
      kind: DaemonSet
 
    # no load balancer
    service:
      enabled: false
 
    # use host network for directly port listening
    hostNetwork: true
 
    ports:
      web:
        port: 80
        proxyProtocol:
          insecure: true
        forwardedHeaders:
          insecure: true
      websecure:
        port: 443
        proxyProtocol:
          insecure: true
        forwardedHeaders:
          insecure: true
 
    # run as root to 80 and 443 port listen permission
    securityContext:
      capabilities:
        add:
          - NET_BIND_SERVICE
      runAsNonRoot: false
      runAsUser: 0

检测到文件更改,k3s会自动应用配置

  • 关闭自带的servicelb组件

通过创建一个名为/etc/rancher/k3s/config.yaml的文件,调整k3s选项

1
2
---
disable-servicelb: true

然后重启k3s

1
systemctl restart k3s

参考资料

K3S Thing: Make Traefik Forward Real Client IP
使用 HelmChartConfig 自定义打包的组件
禁用组件标志

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章