关于在K3S中部署Rancher使用外部负载均衡做TLS终止的问题

Rancher Server 设置

  • Rancher 版本:2.6.8
  • 安装选项 (Docker install/Helm Chart): Helm Chart
    • 如果是 Helm Chart 安装,需要提供 Local 集群的类型(RKE1, RKE2, k3s, EKS, 等)和版本:k3s-v1.24.4-k3s1
  • 在线或离线部署:离线

下游集群信息

  • Kubernetes 版本: 无
  • Cluster Type (Local/Downstream): 无
    • 如果 Downstream,是什么类型的集群?(自定义/导入或为托管 等): 无

用户信息

  • 登录用户的角色是什么? (管理员/集群所有者/集群成员/项目所有者/项目成员/自定义):管理员
    • 如果自定义,自定义权限集:无

主机操作系统:

  • CentOS 7.9

问题描述:
在K3S中离线部署Rancher2.6.8时使用外部Nginx做TLS终止,按照文档要求,需要在渲染Rancher Helm Chart时添加参数–set tls=external。但实践后发现添加这个参数后,会向Rancher的ingress的annotations中添加nginx.ingress.kubernetes.io/ssl-redirect: "false"来组织ssl重定向。但由于K3S默认使用Traefik作为ingress controller,因此这个annotation并没有起到实际效果。我们将Rancher域名解析到我们的外部Nginx上后,访问Rancher会报"重定向次数过多"的错误。将Rancher域名解析到Rancher节点上,发现http访问Rancher仍然会被重定向到https。因此初步定位问题就在Traefik无法识别这个annotation。(其他nginx配置和证书配置都正确,在此不赘述了)

想请问一下,如果要在K3S(默认 Traefik)中部署外部TLS终止的Rancher,需要如何操作,谢谢。

安装步骤

 helm template rancher ./rancher-2.6.8.tgz --output-dir . \
 --no-hooks \
 --namespace cattle-system \
 --set hostname=rancher.test.demo.local \
 --set rancherImage=registry.test.demo.local/rancher/rancher \
 --set privateCA=true \
 --set systemDefaultRegistry=registry.test.demo.local \
 --set useBundledSystemChart=true \
 --set tls=external
kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=test.demo.local.crt \
--key=test.demo.local.key

kubectl -n cattle-system create secret generic tls-ca \
--from-file=cacerts.pem=./cacerts.pem
kubectl -n cattle-system apply -R -f ./rancher

找到解决方法了,在K3S节点创建/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.proxyProtocol.insecure"
      - "--entryPoints.web.forwardedHeaders.insecure"

之后traefik pod会重新创建,问题解决。

1 个赞