首先server已经是LoadBalancer
或者直接使用静态IP
主要是externalTrafficPolicy: Local 参数实现
.spec.externalTrafficPolicy- 表示此服务是否希望将外部流量路由到节点本地或集群范围的端点。有两个可用选项:(Cluster默认)和Local。Cluster隐藏客户端源 IP 并可能导致第二跳到另一个节点,但应该具有良好的整体负载分布。Local保留客户端源 IP 并避免 LoadBalancer 和 NodePort 类型服务的第二跳,但存在潜在的不平衡流量传播风险。
.spec.healthCheckNodePort- 指定服务的健康检查节点端口(数字端口号)。如果您不指定 healthCheckNodePort,服务控制器会从集群的 NodePort 范围内分配一个端口。
您可以通过设置 API 服务器命令行选项来配置该范围, --service-node-port-range. 如果您指定,服务将使用用户指定的 healthCheckNodePort值,前提是服务type设置为 LoadBalancer 并externalTrafficPolicy设置为Local.
https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.2.0
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
externalTrafficPolicy: Local
ports:
- appProtocol: http
name: http
port: 80
protocol: TCP
targetPort: http
- appProtocol: https
name: https
port: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
type: LoadBalancer
loadBalancerIP: 172.18.1.101
tee old-release.yaml <<-'EOF'
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: old-release
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/elb.port: '80'
spec:
rules:
- http:
paths:
- path: '/'
pathType: Prefix
backend:
service:
name: nginx-v1
port:
number: 80
- path: '/sys'
pathType: Prefix
backend:
service:
name: mygin-v1
port:
number: 80
EOF