[英]Kubernetes whitelist-source-range blocks instead of whitelist IP
在 GKE 上運行 Kubernetes
使用 helm 安裝了具有最新穩定版本的 Nginx 控制器。
一切都運行良好,除了添加 whitelist-source-range 注釋導致我完全無法使用我的服務。
入口配置
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: staging-ingress
namespace: staging
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/whitelist-source-range: "x.x.x.x, y.y.y.y"
spec:
rules:
- host: staging.com
http:
paths:
- path: /
backend:
serviceName:staging-service
servicePort: 80
我連接到控制器 pod 並檢查了 nginx 配置並發現了這個:
# Deny for staging.com/
geo $the_real_ip $deny_5b3266e9d666401cb7ac676a73d8d5ae {
default 1;
x.x.x.x 0;
y.y.y.y 0;
}
看起來他是把我鎖在外面,而不是把這個 IP 列入白名單。 但它也鎖定了所有其他地址......我從 staging.com 主機得到 403。
是的。 不過,我自己想通了。 您的服務必須啟用externalTrafficPolicy: Local
。 這意味着應該使用實際的客戶端 IP 而不是內部集群 IP。
要完成此運行kubectl patch svc nginx-ingress-controller -p '{"spec":{"externalTrafficPolicy":"Local"}}'
您的 nginx 控制器服務必須設置為externalTrafficPolicy: Local
。 這意味着將使用實際的客戶端 IP 而不是集群的內部 IP。
您需要從kubectl get svc
命令獲取真實的服務名稱。 該服務類似於:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nobby-leopard-nginx-ingress-controller LoadBalancer 10.0.139.37 40.83.166.29 80:31223/TCP,443:30766/TCP 2d
nobby-leopard-nginx-ingress-controller
是您要使用的服務名稱。
要完成此操作,請運行kubectl patch svc nobby-leopardnginx-ingress-controller -p '{"spec":{"externalTrafficPolicy":"Local"}}'
設置新的 nginx 控制器時,可以使用以下命令:
helm install stable/nginx-ingress \
--namespace kube-system \
--set controller.service.externalTrafficPolicy=Local`
安裝后讓 nginx 入口控制器接受白名單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.