【发布时间】:2021-04-07 08:17:35
【问题描述】:
我有一个使用 HAProxy 的外部 LB,以便拥有一个 HA k8s 集群。我的集群在 Rancher 的 K3s 中,它在内部使用 Traefik LB。 我目前面临一个问题,在我的 pod 中,我获取的是 Traefik IP 而不是真实的客户端 IP。
HAP 配置:
# Ansible managed
defaults
maxconn 1000
mode http
log global
option dontlognull
log stdout local0 debug
option httplog
timeout http-request 5s
timeout connect 5000
timeout client 2000000
timeout server 2000000
frontend k8s
bind *:6443
bind *:80
bind *:443
mode tcp
option tcplog
use_backend masters-k8s
backend masters-k8s
mode tcp
balance roundrobin
server master01 master01.k8s.int.ntw
server master02 master02.k8s.int.ntw
# end Ansible managed
Traefik 服务:
apiVersion: v1
kind: Service
metadata:
annotations:
meta.helm.sh/release-name: traefik
meta.helm.sh/release-namespace: kube-system
service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: "true"
labels:
app: traefik
app.kubernetes.io/managed-by: Helm
chart: traefik-1.81.0
heritage: Helm
release: traefik
spec:
clusterIP: 10.43.250.142
clusterIPs:
- 10.43.250.142
externalTrafficPolicy: Local
ports:
- name: http
nodePort: 32232
port: 80
protocol: TCP
targetPort: http
- name: https
nodePort: 30955
port: 443
protocol: TCP
targetPort: https
selector:
app: traefik
release: traefik
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 10.0.1.1
- ip: 10.0.1.11
- ip: 10.0.1.12
- ip: 10.0.1.2
使用这种配置,我永远无法在 pod 上获得我的真实 IP,在一些研究中,我看到人们建议在 HAP 中使用 send-proxy,如下所示:
server master01 master01.k8s.int.ntw check send-proxy-v2
server master02 master02.k8s.int.ntw check send-proxy-v2
但是当我这样做时,我的所有集群通信都会返回 ERR_CONNECTION_CLOSED。 如果我没看错的话,这意味着它从 HAP 到集群,而集群在某处拒绝流量。
我在这里缺少什么线索吗?
谢谢
【问题讨论】:
标签: kubernetes haproxy traefik high-availability k3s