为了方便日志分析,在用户请求的时候需要统计一下用户的真实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”我试了一下,添加后,保存不了,就没有继续研究,不过结果是实现了。

您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏