前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

K3s禁用Service Load Balancer,解决获取浏览器IP不正确问题

qiguaw 2025-04-26 20:29:42 资源文章 4 ℃ 0 评论

上一篇文章《解决K3s Traefik Ingress取不到浏览器IP问题》初步解决了获取浏览器IP不正确问题,但是总觉得解决的不彻底,所以花了点时间继续研究。

K3s自带了一个名为Klipper Load Balancer的Service Load Balancer(简称servicelb),通过它来转发宿主机端口的网络请求给Traefik Ingress Controller最终到达工作负载的pod,但带来一个问题是获取浏览器IP时,取到的都是pod网段的网关IP,例如10.42.0.1,之前一篇文章探索了简单解决办法就是设置hostNetwork。

但servicelb没发挥应有的作用,不但数据链路长,还费力去配置traefik,所以又经过反复验证,还有以下两种途径,既去掉servicelb,又能解决获取浏览器IP不正确问题。

方法一:设置traefik controller的容器端口映射到宿主机的80和443。

这种方式优点比较多:

  • 去掉了servicelb,少了一次转发,减少开销。
  • 只映射必要的端口比如80和443,不占用宿主机其他端口例如9000、9100
  • 不开小于1024的端口,无需特殊设置。


配置方法:

创建k3s配置文件,禁用servicelb

#cat /etc/rancher/k3s/config.yaml
disable: "servicelb"

创建traefik配置文件,配置端口映射。

# cat /var/lib/rancher/k3s/server/manifests/traefik-config.yaml
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    ports:
      web:
        expose: false
        hostPort: 80
        port: 8000
      websecure:
        expose: false
        hostPort: 443
        port: 8443
    service:
      enabled: false

然后正常安装k3s即可,例如:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh|sudo INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="server" sh -


方法二:设置pod的hostNetwork: true,直接使用宿主机网络监听。

这种方式比较简单粗暴,但要监听80和443这两个小于1024的端口,需要配置权限,否则报错。

创建k3s配置文件,禁用servicelb

#cat /etc/rancher/k3s/config.yaml
disable: "servicelb"

创建traefik配置文件,使用宿主机网络

#cat /var/lib/rancher/k3s/server/manifests/traefik-config.yaml
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    hostNetwork: true
    ports:
      web:
        port: 80
        expose: true
      websecure:
        port: 443
        expose: true
    # 监听≤1204端口,以下配置必须,否则listen tcp :80: bind: permission denied
    securityContext:
      capabilities:
        drop: [ALL]
        add: [NET_BIND_SERVICE]
      readOnlyRootFilesystem: true
      runAsGroup: 0
      runAsNonRoot: false
      runAsUser: 0
    service:
      enabled: false

然后正常安装k3s即可,例如:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh|sudo INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="server" sh -

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表