2017-11-16 7 views
2

私は、ネットワークポリシーのサポートを有効にして、Google Kubernetes Engine(GKE)で動作するKubernetesクラスタを持っています。私はもうそれに接続することはできませんクラスタに必ず他のポッドを作るために、このネットワークポリシーを作成した後Kubernetes NetworkPolicyはロードバランサを許可します

kubectl run nginx --image=nginx 
kubectl expose deployment nginx --port=80 --type=LoadBalancer 

: 私はそれのためnginxの展開とロードバランサを作成し

kind: NetworkPolicy 
apiVersion: networking.k8s.io/v1 
metadata: 
    name: access-nginx 
spec: 
    podSelector: 
    matchLabels: 
     run: nginx 
    ingress: 
    - from: 
     - namespaceSelector: 
      matchLabels: 
      name: kube-system 
    ports: 
    - protocol: TCP 
     port: 80 

は今(意図したように)私のクラスタ内の他のポッドがそれに到達することはできません。

kubectl run busybox --rm -ti --image=busybox /bin/sh 
If you don't see a command prompt, try pressing enter. 
/# wget --spider --timeout=1 nginx 
Connecting to nginx (10.63.254.50:80) 
wget: download timed out 

しかし、それは私の外部ブラウザを使用して、私はまたを通じてそれにもう接続できないことを私を驚かせましたロードバランサ:

open http://$(kubectl get svc nginx --output=jsonpath={.status.loadBalancer.ingress[0].ip}) 

ポリシーを削除すると、再び機能します。

私の質問は、どのようにnginxに到達するのを他のポッドからブロックするのですか?ロードバランサを開いた状態でアクセスを維持しますか?

答えて

1

私は私のネットワークポリシーレシピリポジトリにこのことについて話しました:「ローカルトラフィックを否定しながら、外部ロードバランサを許可https://github.com/ahmetb/kubernetes-networkpolicy-tutorial/blob/a18f9e6e/08-allow-external-traffic.md

は、理にかなっているユースケースではありませんので、それはネットワークポリシーを使用することはできません。

Service type = LoadBalancerおよびIngressリソースを使用するには、これらのリソースによって選択されたポッドへのすべてのトラフィックを許可する必要があります。

あなたは本当にあなたが0.0.0.0/0(すべてのIPv4)からのトラフィックを許可するようにfrom.ipBlock.cidrfrom.ipBlock.cidr.exceptリソースを使用して、10.0.0.0/8(または任意のプライベートIP範囲GKEを使用しています)を除くことができますしたい場合。

関連する問題