2016-11-16 69 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