为了方便日志分析,在用户请求的时候需要统计一下用户的真实ip地址,默认环境中阿里云的ingress的配置是不支持的,所以需要我们修改一下ingress的模式,必须修改成local模式,如果修改成local的模式会出现的问题是pod中的容器无法请求slb,因为Local表示:流量只发给本机的Pod,Cluster表示:流量可以转发到其他节点上的Pod。如果我们想使用local模式,又想可以发送给其他机器的pod,就需要配置LoadBalancer。这里不多说了,如何修改local模式,在配置slb的yaml文件中
apiVersion: v1 kind: Service metadata: name: nginx-ingress-lb namespace: kube-system labels: app: nginx-ingress-lb annotations: service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet service.beta.kubernetes.io/alicloud-loadbalancer-id: <YOUR_INTRANET_SLB_ID> service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true' spec: type: LoadBalancer externalTrafficPolicy: "Cluster" #Cluster改成local ports: - port: 80 name: http targetPort: 80 - port: 443 name: https targetPort: 443 selector: app: ingress-nginx
如果已经安装了,可以使用命令kubectl edit svc nginx-ingress-lb -n kube-system进行编辑。
......................... namespace: kube-system resourceVersion: "460776387" selfLink: /api/v1/namespaces/kube-system/services/nginx-ingress-lb-internet uid: f73224f6-d89d-4396-9057-3662879f8e33 spec: clusterIP: 192.168.74.62 externalTrafficPolicy: Cluster #Cluster改成local healthCheckNodePort: 30910 ports: - name: http nodePort: 31705 port: 80 protocol: TCP targetPort: 80 ..................................
修改后,externalTrafficPolicy就是local模式了,下面就修改获取客户端的真实ip地址,编辑kubectl -n kube-system edit cm nginx-configuration
................................................ apiVersion: v1 data: allow-backend-server-header: "true" compute-full-forwarded-for: "true" enable-underscores-in-headers: "true" forwarded-for-header: X-Forwarded-For generate-request-id: "true" ignore-invalid-headers: "true" ....................................
官方推荐的使用“use-forwarded-headers: "true”我试了一下,添加后,保存不了,就没有继续研究,不过结果是实现了。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏