我们的集群上有一个 kubernetes 入口。我们希望将其访问权限限制为仅从 LAN 内部访问它的人(10.0.0.0/16
)。因此,在入口注释中,我有nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/16"
。
但这仍然允许来自任何地方的流量。将其设置为10.0.0.0/24
(我们的 DHCP 范围),它根本不允许任何流量。
当我检查 nginx-ingress-controller 日志时,我看到
10.0.10.1 - - [2019 年 10 月 15 日:05:40:46 +0000] “GET / HTTP/2.0” 200 2073 “-” “curl/7.54.0” 38 0.019 [wfs-ipa-8443] [] 10.0.1.2:8443 2073 0.020 200 a2d2053149dd26a490251439629134ff
这表明它将源 IP 视为入口控制器 pod 当前正在运行的节点。我怎样才能让它将源 IP 视为其 LAN IP 或我们拥有的单个 WAN IP?
编辑:
ingress.yml
:
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ipa
namespace: wfs
annotations:
kubernetes.io/ingress.class: "nginx"
certmanager.k8s.io/cluster-issuer: "letsencrypt-prod"
ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/use-proxy-protocol: "true"
nginx.ingress.kubernetes.io/auth-tls-verify-client: "off"
nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/16"
spec:
tls:
- hosts:
- ipa.example.com
secretName: ipa-tls
rules:
- host: ipa.example.com
http:
paths:
- backend:
serviceName: ipa
servicePort: 8443
path: /
答案1
这是一个老问题,可能已被作者解决,但对于其他社区成员,我决定提供一些解释作为答案。
看到的源 IPNGINX Ingress Controller Container
是不是客户端的原始源 IP. 要在服务配置文件中启用客户端 IP 设置的保存service.spec.externalTrafficPolicy
(请参阅Local
保留客户端源 IP 文档)。
如果你已经拥有kubernetes/ingress-nginx部署后,您可以使用以下命令来配置该字段:
$ kubectl patch svc <INGRESS_CONTROLLER_SERVICE_NAME> -p '{"spec":{"externalTrafficPolicy":"Local"}}'
如果您想在安装期间启用客户端源 IP 保留kubernetes/ingress-nginx,添加--set controller.service.externalTrafficPolicy=Local
到Helm install 命令中。
此外,您还可以在此找到有用的信息Kubernetes 文档。