【发布时间】:2022-01-25 12:13:35
【问题描述】:
我想在 GKE Ingress Controller 后面运行的 .NET 应用程序中捕获客户端 IP 地址,以确保允许客户端。
var requestIpAddress = request.HttpContext.Connection.RemoteIpAddress.MapToIPv4();
我没有获取客户端 IP 地址,而是获取了我的 GKE 入口 IP 地址,因为入口应用了一些转发规则。
GKE Ingress 控制器指向 NodePort 类型的 Kubernetes 服务。
我尝试将规范添加到 NodePort 服务以保留客户端 IP 地址,但它没有帮助。这是因为 NodePort 服务也在 Ingress 后面运行
externalTrafficPolicy: Local
是否可以在 Kubernetes 上使用 GKE Ingress 控制器保留客户端 IP 地址?
Ingress 的 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
【问题讨论】:
-
您需要获取服务器上的套接字并访问远程端点。请参阅:digitalocean.com/community/questions/…
-
您使用的是哪个 Kubernetes 版本?
-
@MikolajS。客户端版本:v1.21.3,服务器版本:v1.21.6-gke.1500
-
基于this 和this answer 你能在你的应用程序中使用
X-Forwarded-For标头吗? -
X-Forwarded-For标头很容易修改。在我的应用程序中,我想使用客户端的 IP 地址作为我需要授权某个支付交易的保证。我不能依赖可以编辑的标题
标签: c# .net kubernetes google-cloud-platform kubernetes-ingress