如何在 Kubernetes 上使用 GKE Ingress 控制器保留客户端 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();
由于 Ingress 应用了一些转发规则,我得到了我的 GKE Ingress IP 地址,而不是获取客户端 IP 地址。
GKE Ingress 控制器指向 NodePort 类型的 Kubernetes 服务。
我尝试将规范添加到 NodePort 服务以保留客户端 IP 地址,但没有帮助。这是因为 NodePort 服务也在 Ingress
后面运行
externalTrafficPolicy: Local
是否可以在 Kubernetes 上使用 GKE Ingress 控制器保留客户端 IP 地址?
入口节点端口服务:
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 地址的唯一方法是 use X-Forwarded-For
header. It's known limitation 所有 GCP HTTP(s) 负载均衡器(GKE Ingress 使用外部 HTTP(s) LB)。
如果它不适合您的需求,请考虑迁移到使用外部 TCP/UDP 网络 LoadBalancer 的 third-party Ingress Controller,例如 NGINX Ingress Controller.
我想在 GKE Ingress Controller 后面的 .NET 应用程序 运行 中捕获客户端 IP 地址,以确保允许客户端。
var requestIpAddress = request.HttpContext.Connection.RemoteIpAddress.MapToIPv4();
由于 Ingress 应用了一些转发规则,我得到了我的 GKE Ingress IP 地址,而不是获取客户端 IP 地址。
GKE Ingress 控制器指向 NodePort 类型的 Kubernetes 服务。
我尝试将规范添加到 NodePort 服务以保留客户端 IP 地址,但没有帮助。这是因为 NodePort 服务也在 Ingress
后面运行externalTrafficPolicy: Local
是否可以在 Kubernetes 上使用 GKE Ingress 控制器保留客户端 IP 地址?
入口节点端口服务:
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 地址的唯一方法是 use X-Forwarded-For
header. It's known limitation 所有 GCP HTTP(s) 负载均衡器(GKE Ingress 使用外部 HTTP(s) LB)。
如果它不适合您的需求,请考虑迁移到使用外部 TCP/UDP 网络 LoadBalancer 的 third-party Ingress Controller,例如 NGINX Ingress Controller.