web-dev-qa-db-ja.com

Kopsを使用したAWS上のKubernetesクラスター-NodePortサービスは利用できません

KubernetesクラスターでNodePortサービスにアクセスできません。

目標

webSocketとhttp/2を使用できるように、ALBIngressコントローラーをセットアップします

そのコントローラーの必要に応じてNodePortサービスをセットアップします

実行した手順

以前は、Kops(バージョン1.6.2)クラスターがAWSeu-west-1で作成されていました。 Nginx入力用のkopsアドオンとKube-legoが追加されました。 ELB入力は正常に機能しています。

そのプロジェクトで指定されたIAMプロファイルを使用して、カスタムAWSキーでALB IngressControllerをセットアップします。

Kubectl replace --forceを使用して、サービスタイプをLoadBalancerからNodePortに変更しました

> kubectl describe svc my-nodeport-service
Name:                   my-node-port-service
Namespace:              default
Labels:                 <none>
Selector:               service=my-selector
Type:                   NodePort
IP:                     100.71.211.249
Port:                   <unset> 80/TCP
NodePort:               <unset> 30176/TCP
Endpoints:              100.96.2.11:3000
Session Affinity:       None
Events:                 <none>

> kubectl describe pods my-nodeport-pod
Name:           my-nodeport-pod
Node:           <ip>.eu-west-1.compute.internal/<ip>
Labels:         service=my-selector
Status:         Running
IP:             100.96.2.11
Containers:
  update-center:
    Port:               3000/TCP
    Ready:              True
    Restart Count:      0

(ssh into node)
$ Sudo netstat -nap | grep 30176
tcp6       0      0 :::30176                :::*                    LISTEN      2093/kube-proxy

結果

ALBからのカールがハングする

<public ip address of all nodes>:<node port for service>からのカールがハングする

期待される

ALBから直接node:node-portへのカールは200 "Ok"(ルートへのサービスのhttp応答)を返す必要があります

更新:上記のgithub参照で作成された問題と、場合によってはさらに詳細な情報:

12

デフォルトでは、Kopsは外部からのNodePortトラフィックを許可するようにEC2インスタンスを設定しません。

クラスタ外のトラフィックがNodePortに到達するには、AWSのEC2コンソールでKubernetesノードであるEC2インスタンスの設定を編集する必要があります。

EC2コンソールで、[セキュリティグループ]をクリックします。 Kopsは、クラスター用に作成した元のセキュリティグループにnodes.<your cluster name>およびmaster.<your cluster name>という注釈を付ける必要があります。

NodePortsのデフォルトのポート範囲からインスタンスにトラフィックを転送するには、これらのセキュリティグループを変更する必要があります。

セキュリティグループをクリックし、ルールをクリックして、次のルールを追加します。

ノードとマスターで開くポート範囲:30000-32767

security group rule

これにより、インターネット上の誰もがクラスター上のNodePortにアクセスできるようになるため、これらを公開するようにしてください。

または、任意のオリジンから許可する代わりに、alb-ingress-controllerによってALB用に作成されたセキュリティグループからのみ許可することができます。ただし、これらは再作成できるため、kubernetesサービスの変更に関するルールを変更する必要がある可能性があります。 NodePortを明示的に指定することは、ランダムに割り当てられたものではなく、事前に定義された既知のNodePortであることをお勧めします。

23

マスターのSGは、:を機能させるためにノードポート範囲を開く必要はありません。

したがって、ワーカーのSGのみがポート範囲を開く必要があります。

0
ywauto