5

次のように私はGKE上Kubernetesサービスがあります。私のKubernetesサービスにIPでアクセスできないのはなぜですか?

$ kubectl describe service staging 
Name:   staging 
Namespace:  default 
Labels:   <none> 
Selector:  app=jupiter 
Type:   NodePort 
IP:    10.11.246.27 
Port:   <unnamed> 80/TCP 
NodePort:  <unnamed> 31683/TCP 
Endpoints:  10.8.0.33:1337 
Session Affinity: None 
No events. 

私はそのエンドポイントの1つ(10.8.0.21:1337)を介して、またはノード・ポート(私の場合は10.240.251.174:31683)を介して直接VMからサービスにアクセスすることができます。しかし、私が10.11.246.27:80にアクセスしようとすると、何も得られません。私はまた、ポート1337と31683を試しました。

なぜ私はそのIP経由でサービスにアクセスできませんか?ファイアウォールルールなどが必要ですか?

答えて

9

サービスIPは、kube-proxyによって管理される仮想IPです。したがって、そのIPを意味のあるものにするためには、クライアントはkube-proxy "overlay"ネットワークの一部でなければなりません(同じapiserverを指し示すkube-proxyを実行してください)。

GCE/GKE上のポッドIPは、GCE Routesによって管理されます.GCEは、ネットワーク内のすべてのVMの「アンダーレイ」によく似ています。

クラスタ外から非公開のサービスにアクセスするには、いくつかの方法があります。 Here詳細はありますが、要約すると:

  1. クラスタのサービスのためのバスルームGCEルートを作成します。
  2. クラスタのkube-proxyは、クラスタのサービスにアクセスしたい場所にインストールしてください。
関連する問題