阿里云的ack配置ingress获取客户端真实ip

avatar 2021年6月24日18:14:59 评论 2,090 次浏览

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

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: