haproxy–> istio-ingressgateway
集群外haproxy四层代理到istio-ingressgateway地址。
haproxy开启send-proxy特性
frontend 443
bind :443
mode tcp
use_backend 443-backend
backend 443-backend
mode tcp
server web1 192.168.11.10:30561 send-proxy check inter 3000 fall 3 rise 5
server web2 192.168.11.26:30561 send-proxy check inter 3000 fall 3 rise 5
isito配置envoyfilter开启proxy_protocol协议支持
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: proxy-protocol
namespace: istio-system
spec:
workloadSelector:
labels:
istio: ingressgateway
configPatches:
- applyTo: LISTENER
patch:
operation: MERGE
value:
listener_filters:
- name: envoy.filters.listener.proxy_protocol
- name: envoy.filters.listener.tls_inspector
云厂商LoadbalanceIP -->istio-ingressgateway
参考ucloud的ulb4
https://docs.ucloud.cn/uk8s/service/getresourceip
为loadbalance类型的svc增加externalTrafficPolicy: Local
# kubectl edit svc istio-ingressgateway -n istio-system
spec:
externalTrafficPolicy: Local
当设置了externalTrafficPolicy为Local时,Node上的iptables规则会设置只将IP包转发到在本机上运行的Pod,如果本机上无对应Pod在运行,此包将被DROP。
对于其他未运行Service对应Pod的Node节点来说,ULB VServer对其健康检查探测会因为iptables的DROP规则而失败,这样来自用户的请求永远不会被发往这些节点上,可以确保这些请求都能被正确响应。