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

时间:2017-12-27 10:49:37

标签: nginx kubernetes google-compute-engine

在GKE上运行Kubernetes

使用helm安装最新稳定版本的Nginx控制器。

Everythings运行良好,除了添加白名单 - 源范围注释导致我完全无法使用我的服务。

Ingress配置 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。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

您的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入口控制器接受白名单。