动态更新 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/8
或 10.0.0.0/8
(如注释所述),则控制器将拒绝请求并返回 Forbidden
错误.
ingress
资源不是需要重新运行或关闭以进行更新的资源,例如部署。
AWS 负载均衡器在集群外部。当然,您可以选择 block/whitelist 在 AWS 云中的流量到达集群之前,这很好,但这不是在 nginx 控制器中管理的。
可以进一步阅读 Ingresses here
我在 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/8
或 10.0.0.0/8
(如注释所述),则控制器将拒绝请求并返回 Forbidden
错误.
ingress
资源不是需要重新运行或关闭以进行更新的资源,例如部署。
AWS 负载均衡器在集群外部。当然,您可以选择 block/whitelist 在 AWS 云中的流量到达集群之前,这很好,但这不是在 nginx 控制器中管理的。
可以进一步阅读 Ingresses here