簡體   English   中英

如何在 Kubernetes 上使用 GKE 入口 controller 保留客戶端 IP 地址?

[英]How to preserve Client IP Address with GKE Ingress controller on Kubernetes?

我想在 GKE Ingress Controller 后面運行的 .NET 應用程序中捕獲客戶端 IP 地址,以確保允許客戶端。

var requestIpAddress = request.HttpContext.Connection.RemoteIpAddress.MapToIPv4();

由於入口應用了一些轉發規則,我沒有獲取客戶端 IP 地址,而是獲取了我的 GKE 入口 IP 地址。

GKE Ingress controller 指向 NodePort 類型的 Kubernetes 服務。

我試圖將規范添加到 NodePort 服務以保留客戶端 IP 地址,但它沒有幫助。 這是因為 NodePort 服務也在 Ingress 后面運行

externalTrafficPolicy: Local

是否可以在 Kubernetes 上使用 GKE 入口 controller 保留客戶端 IP 地址?

入口的 NodePort 服務:

apiVersion: v1
kind: Service
metadata:
  name: api-ingress-service
  labels:
    app/name: ingress.api
spec:
  type: NodePort
  externalTrafficPolicy: Local
  selector:
    app/template: api
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: http

入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  namespace: default
  labels:
    kind: ingress
    app: ingress
  annotations:
    networking.gke.io/v1beta1.FrontendConfig: frontend-config
spec:
  tls:
  - hosts:
    - '*.mydomain.com'
    secretName: tls-secret
  rules:
  - host: mydomain.com
    http:
      paths:
      - path: /*
        pathType: ImplementationSpecific
        backend:
          service:
            name: api-ingress-service
            port:
              number: 80

發布社區 wiki 以獲得更好的可見性。 隨意擴展它。


目前在 GKE Ingress 中獲取客戶端源 IP 地址的唯一方法是使用X-Forwarded-For header。 所有 GCP HTTP(s) 負載均衡器的已知限制(GKE Ingress 使用外部 HTTP(s) LB)。

如果它不適合您的需求,請考慮遷移到使用外部 TCP/UDP 網絡負載平衡器的第三方 Ingress Controller,例如NGINX Ingress Z9BBF373797BF7CF7BA62C80023682E2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM