我们的集群上有一个 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 - - [15/Oct/2019: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: /
Run Code Online (Sandbox Code Playgroud)
这是一个老问题,可能由作者解决,但对于其他社区成员,我决定提供一个带有一些解释的答案。
中看到的源IPNGINX Ingress Controller Container并不是客户端的原始源IP。要启用在服务配置文件中设置的客户端 IP 的保留(请参阅service.spec.externalTrafficPolicy保留客户端源 IP 文档)。Local
如果您已经部署了kubernetes/ingress-nginx,您可以使用以下命令来配置此字段:
$ kubectl patch svc <INGRESS_CONTROLLER_SERVICE_NAME> -p '{"spec":{"externalTrafficPolicy":"Local"}}'
Run Code Online (Sandbox Code Playgroud)
如果您想在安装kubernetes/ingress-nginx期间启用客户端源 IP 保留,请添加--set controller.service.externalTrafficPolicy=Local到 Helm install 命令中。
此外,您还可以在此Kubernetes 文档中找到有用的信息。
| 归档时间: |
|
| 查看次数: |
3774 次 |
| 最近记录: |