すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:NodePortサービスを使用したアプリケーションの公開

最終更新日:Dec 19, 2024

Kubernetesでは、サービスは、一連のポッドで実行されているアプリケーションをネットワークサービスとして公開する抽象化です。 このトピックでは、NGINXステートレスアプリケーションを例として、Container Service for Kubernetes (ACK) Edgeクラスター内のNodePortサービスを使用してアプリケーションを公開する方法を示します。

NodePortサービスの使用

ACK Edgeクラスターでは、異なる仮想プライベートクラウド (VPC) に存在するエッジノードは直接通信できません。 したがって、ロードバランサーはエッジでは適用できません。 サービスを外部に公開する一般的なアプローチは、NodePortサービスを使用することです。 次の図は、ACK EdgeクラスターでのNodePortサービスの実装を示しています。 NodePortサービスがデプロイされ、バックエンドポッドが選択されると、ノードのIPアドレスとポートを介してバックエンドサービスに直接アクセスできます。 サービスの種類とその詳細については、「サービスのクイックスタート」をご参照ください。

使用上の注意

ACKエッジクラスター内のノードは、多くの場合、複数のネットワークドメインに分散されているため、異なるドメインにあるノードとコンテナ間の通信が妨げられます。

  • トラフィックが現在のノードまたはノードプールのバックエンドポッドにのみ送信されるようにするには、Serviceトポロジを構成します。 これにより、他のネットワークドメインのバックエンドポッドにルーティングされるトラフィックから発生する可能性のあるネットワーク接続の問題を軽減できます。 詳細については、「サービストポロジの設定」をご参照ください。

  • 異なるネットワークドメイン間のノードポートをリッスンし、ポートの競合を回避するには、ポートの分離を設定することを推奨します。 詳細については、「ノードプールに基づくNodePortリスニングの設定」をご参照ください。

手順

ステップ1: アプリケーションのデプロイ

  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
    
  2. 次のコマンドを実行して、アプリケーションをデプロイします。

    kubectl apply -f nginx.yaml
  3. 次のコマンドを実行して、アプリケーションのデプロイメントステータスを確認します。

    kubectl getデプロイnginx

    期待される出力:

    の名前は日付まで利用可能な年齢を準備しています
    nginx 2/2 2 2 43s 

ステップ2: NodePortサービスの使用

  1. 次の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
    
  2. 次のコマンドを実行して、アプリケーション公開用にnginx-svc.yamlという名前のサービスを作成します。

    kubectl apply -f nginx-svc.yaml
  3. 次のコマンドを実行して、NodePortサービスの作成を確認します。

    kubectl get svc my-nginx-svc

    期待される出力:

    名タイプCLUSTER-IP EXTERNAL-IPポート年齢
    nginx-svc NodePort 192.168.xxx.xxx <none> 80:31309/TCP 3s 
  4. 次のコマンドを実行して、アプリケーションにアクセスします。

    curl <Node-IP>:31309# <Node-IP> をアクセスするノードアドレスに置き換えます。