[英]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.