Kubernetesでは、サービスは、一連のポッドで実行されているアプリケーションをネットワークサービスとして公開する抽象化です。 このトピックでは、NGINXステートレスアプリケーションを例として、Container Service for Kubernetes (ACK) Edgeクラスター内のNodePortサービスを使用してアプリケーションを公開する方法を示します。
NodePortサービスの使用
ACK Edgeクラスターでは、異なる仮想プライベートクラウド (VPC) に存在するエッジノードは直接通信できません。 したがって、ロードバランサーはエッジでは適用できません。 サービスを外部に公開する一般的なアプローチは、NodePortサービスを使用することです。 次の図は、ACK EdgeクラスターでのNodePortサービスの実装を示しています。 NodePortサービスがデプロイされ、バックエンドポッドが選択されると、ノードのIPアドレスとポートを介してバックエンドサービスに直接アクセスできます。 サービスの種類とその詳細については、「サービスのクイックスタート」をご参照ください。
使用上の注意
ACKエッジクラスター内のノードは、多くの場合、複数のネットワークドメインに分散されているため、異なるドメインにあるノードとコンテナ間の通信が妨げられます。
トラフィックが現在のノードまたはノードプールのバックエンドポッドにのみ送信されるようにするには、Serviceトポロジを構成します。 これにより、他のネットワークドメインのバックエンドポッドにルーティングされるトラフィックから発生する可能性のあるネットワーク接続の問題を軽減できます。 詳細については、「サービストポロジの設定」をご参照ください。
異なるネットワークドメイン間のノードポートをリッスンし、ポートの競合を回避するには、ポートの分離を設定することを推奨します。 詳細については、「ノードプールに基づくNodePortリスニングの設定」をご参照ください。
手順
ステップ1: アプリケーションのデプロイ
次のYAMLテンプレートを使用して、nginx.yamlという名前のファイルを作成します。
apiVersion: apps/v1 kind: 配置 メタデータ: name: nginx ラベル: アプリ: nginx spec: レプリカ:2 セレクタ: matchLabels: アプリ:nginx template: metadata: labels: アプリ:nginx 仕様: containers: - name: nginx 画像: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ポート: -containerPort: 80次のコマンドを実行して、アプリケーションをデプロイします。
kubectl apply -f nginx.yaml次のコマンドを実行して、アプリケーションのデプロイメントステータスを確認します。
kubectl getデプロイnginx期待される出力:
の名前は日付まで利用可能な年齢を準備しています nginx 2/2 2 2 43s
ステップ2: NodePortサービスの使用
次のService YAMLテンプレートを使用して、nginx-svc.yamlという名前のファイルを作成します。
apiVersion: v1 種類: サービス メタデータ: ラベル: アプリ:nginx 名前: nginx-svc namespace: デフォルト spec: ポート: - port: 80 protocol: TCP targetPort: 80 selector: # spec.selectorは、nginx.yamlのspec.selector.matchLabelsに対応しています。 アプリ:nginx タイプ: NodePort次のコマンドを実行して、アプリケーション公開用にnginx-svc.yamlという名前のサービスを作成します。
kubectl apply -f nginx-svc.yaml次のコマンドを実行して、NodePortサービスの作成を確認します。
kubectl get svc my-nginx-svc期待される出力:
名タイプCLUSTER-IP EXTERNAL-IPポート年齢 nginx-svc NodePort 192.168.xxx.xxx <none> 80:31309/TCP 3s次のコマンドを実行して、アプリケーションにアクセスします。
curl <Node-IP>:31309# <Node-IP> をアクセスするノードアドレスに置き換えます。