Kubernetes白名单源范围块而不是白名单IP

λ A*_*r λ 5 nginx google-compute-engine kubernetes

在GKE上运行Kubernetes

使用头盔安装了具有最新稳定版本的Nginx控制器。

一切正常,除了添加白名单-源范围注释结果之外,因为我完全无法使用我的服务。

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的Ingress配置 ,并检查了Nginx配置,发现了这一点:

# Deny for staging.com/
geo $the_real_ip $deny_5b3266e9d666401cb7ac676a73d8d5ae {
    default 1;

    x.x.x.x 0;
    y.y.y.y 0;
}
Run Code Online (Sandbox Code Playgroud)

好像他将我拒之门外,而不是将该IP列入白名单。但这也锁定了所有其他地址...我从staging.com主机获得了403。

Gao*_*han 6

您的 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
Run Code Online (Sandbox Code Playgroud)

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`
Run Code Online (Sandbox Code Playgroud)

安装后让 nginx 入口控制器接受白名单。


λ A*_*r λ 5

是。但是,我自己弄清楚了。您的服务必须启用externalTrafficPolicy: Local。这意味着应该使用实际的客户端IP而不是内部群集IP。

要完成此运行 kubectl patch svc nginx-ingress-controller -p '{"spec":{"externalTrafficPolicy":"Local"}}'

  • 如果这不能解决整个问题,还要重新启动 nginx 控制器 pod。之后它应该工作。 (2认同)