适用于 LAN 的 Kubernetes Ingress 白名单源范围

适用于 LAN 的 Kubernetes Ingress 白名单源范围

我们的集群上有一个 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 文档

相关内容