我在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禁止错误请参阅此服务器故障问题。