在GKE中保留客户端IP



我在GKE集群中的nginx入口控制器后面有一个后端应用程序,我只想将某个IP列入白名单以访问它。我在相关入口中添加了以下注释:

nginx.ingress.kubernetes.io/whitelist-source-range: "my-ip/32"

我还在入口控制器服务中将externalTrafficPolicy设置为Local

问题是,当我点击应用程序时,它总是返回403 Forbidden在入口控制器日志中,当我点击应用程序时,它会记录access forbidden by rule, client: 127.0.0.1, server: my-appliaction.domain.ext,这意味着客户端IP不会转发到入口控制器。

这是我的入口清单:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my_app
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: x.x.x.x/32
spec:
ingressClassName: nginx
rules:
- host: my_app.company.com
http:
paths:
- backend:
service:
name: my_app
port:
number: 80
path: /
pathType: ImplementationSpecific
tls:
- hosts:
- my_app.company.com
secretName: certificate.tls

我错过什么了吗?

提前谢谢。

要在GKE中保留客户端IP,我们可以遵循以下两种方法:

方法1:如果您想将客户端ip配置为所有入口规则,我们必须全局设置此ip,并且白名单源范围值应在白名单源区域的NGINX ConfigMap中设置。您可以使用ngx_http_access_module。

注意:所有入口控制器都不支持白名单,您可以从本文档中交叉检查您的入口控制器。

方法2:如果您不想将ip配置为所有入口规则,则需要创建两个独立的入口。第一个入口用于白名单主机,第二个入口用于您的主机。

有关更多信息,请参阅此堆叠问题。

关于403禁止错误请参阅此服务器故障问题。

最新更新