2016-11-16 144 views
1

我有一个运行在GKE上的Kubernetes 1.4.5集群,我想要测试它。它接受使用HTTPS入口如下我可以将源IP限制为由Ingress创建的GCP负载均衡器:

kind: Ingress 
apiVersion: extensions/v1beta1 
metadata: 
    name: keycloak-ingress 
    annotations: 
    kubernetes.io/ingress.allow-http: "false" 
    #kubernetes.io/ingress.class: "gce" 
spec: 
    tls: 
    - secretName: mysecret 
    backend: 
    serviceName: keycloak-https-service 
    servicePort: 443 

虽然在测试中,我想限制可以访问我的群集来源IP。由于负载均衡器会将所有传入流量的源IP转换为本地IP地址,因此Google云防火墙无法限制此流量。有没有办法限制流量进入负载平衡器?

我明白这是严格的GCE问题,但可能有Kubernetes可能提供的解决方案。

回答

3

你正在寻找一个管道:

GCE L7 LB - > VM:nodePort - >豆荚

交通状况:

GCE L7 LB - >您的vms

应该来自130.211.0.0/22,如所述。你应该已经有了一个防火墙规则。 交通状况:

虚拟机 - >容器

应该来自你的虚拟机的IP。你无法规范谁在谈论这个磅,你可以规范谁与这些节点谈话。

不幸的是,由于上述情况,这对HTTP LB无效。它将适用于L3/L4 LB,因为您可以在包中获得实际客户端的源IP,最终发送到vm:http://kubernetes.io/docs/user-guide/load-balancer/#annotation-to-modify-the-loadbalancer-behavior-for-preservation-of-source-ip

+0

谢谢您花时间回答。我已经回到L4(我想!)使用服务 –

+0

感谢您花时间回答。 我已经回到L4(我想!)使用服务类型LoadBalancer,但我仍然失去源IP。看看GCP负载平衡,它现在只有一个转发规则,转到一个目标池,该目标池被提供给虚拟机。 GCP有更好的方法吗? '类型:服务 apiVersion:V1 元数据: 名称:keycloak-HTTPS服务 规格: 类型:负载平衡器 externalIPs: - xxx.xxx.xxx.xxx 端口: - 端口:443 TARGETPORT :8443 name:https selector: app:keycloak-pod' –

+0

在目标容器中看到的会话的源IP不会是客户端的原始源IP。这是Kubernetes v1.5的默认行为。但是,从v1.5开始,添加了一个可选的测试版功能,可以保留GCE/GKE环境的客户端源IP。 – George