簡體   English   中英

Kubernetes whitelist-source-range 塊而不是白名單 IP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM