0

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

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

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

4

1 回答 1

0

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

--

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

它通过使用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 负载均衡器在集群外部。当然,您可以选择在 AWS 云中的流量到达集群之前将其阻止/列入白名单,这很好,但这不是在 nginx 控制器中管理的。

Ingresses 中的一些进一步阅读可在此处获得

于 2022-02-01T10:51:44.310 回答