简短的回答:您没有将白名单注释放在控制器上,而是将其放在入口资源上。并且更新不需要任何停机时间。
--
长答案:是的,默认情况下,控制器负载均衡器对世界开放,这是意料之中的。所有流量都进入入口控制器的负载均衡器,然后控制器确定如何在集群内路由它。
它通过使用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/8
或10.0.0.0/8
(如注释所述)进入控制器,则控制器将拒绝该请求并出现Forbidden
错误。
该ingress
资源不是需要重新启动或删除以进行更新的资源,例如部署。
AWS 负载均衡器在集群外部。当然,您可以选择在 AWS 云中的流量到达集群之前将其阻止/列入白名单,这很好,但这不是在 nginx 控制器中管理的。
Ingresses 中的一些进一步阅读可在此处获得