动态更新 whitelist-source-range 而不会导致停机?

Dynamically update whitelist-source-range without causing downtime?

我在 Kubernetes 上有一个应用程序 运行,它使用 nginx 作为在 AWS 中创建负载均衡器的入口控制器。我注意到默认情况下,该应用程序是向世界开放的,0.0.0.0/32 被添加到附加到负载均衡器的 AWS 安全组的入站规则中。 我只想允许某些 IP 访问该应用程序。这让我在入口控制器中使用 nginx.ingress.kubernetes.io/whitelist-source-range 注释。

但我不知道必须事先允许访问该应用程序的实体的 IP。创建特定容器的上游进程(Jenkins 作业),它尝试与 Kube 上 运行 的应用程序通信。

如何动态修改入口控制器注释以添加和删除 IP 而不会导致任何停机?不,我没有可以添加的通用 IP 范围。我有几个不同的 VPC,它们有自己的 CIDR 块。

简短回答:您没有将白名单注释放在控制器上,而是放在入口资源上。并且更新不需要任何停机时间。

--

长答案:是的,默认情况下,控制器负载均衡器对世界开放,这是预期的。所有流量都进入入口控制器的负载均衡器,然后控制器决定如何在集群内路由它。

它通过使用 ingress 资源来确定此路由。这是一个例子:


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/whitelist-source-range: 12.0.0.0/8,10.0.0.0/8
  name: ingress-whitelist-example
spec:
  rules:
  - host: somehost.com
    http:
      paths:
      - backend:
          service:
            name: service-for-somehost
            port:
              number: 80
  tls:
  - hosts:
    - somehost.com
    secretName: tls-secret

入口控制器将获取(在此示例中)域主机 somehost.com 的流量,并将请求路由到集群中的服务 service-for-somehost,端口 80

如果请求进入控制器的范围超出 12.0.0.0/810.0.0.0/8(如注释所述),则控制器将拒绝请求并返回 Forbidden 错误.

ingress 资源不是需要重新运行或关闭以进行更新的资源,例如部署。

AWS 负载均衡器在集群外部。当然,您可以选择 block/whitelist 在 AWS 云中的流量到达集群之前,这很好,但这不是在 nginx 控制器中管理的。

可以进一步阅读 Ingresses here