在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。
答案 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入口控制器接受白名单。