Ingress を使用して NodePort タイプのサービスを公開する

最終公開日 : Oct 02, 2026
単一階層展開では、Kubernetes クラスターの外部にある Ingress NetScaler (VPX または MPX) が、Kubernetes クラスターに展開されたマイクロサービスへのすべての Ingress トラフィックを受信します。Ingress トラフィックがマイクロサービスに到達するためには、Ingress NetScaler インスタンスとポッド間のネットワーク接続を確立する必要があります。
ポッドはオーバーレイネットワーク上で実行されるため、ポッドの IP アドレスはプライベート IP アドレスであり、Ingress NetScaler インスタンスはポッド内で実行されているマイクロサービスに到達できません。クラスターの外部からサービスにアクセスできるようにするには、NodePort タイプのサービスを作成できます。NetScaler インスタンスは、Ingress トラフィックをポッドを含むノードに負荷分散します。
NodePort タイプのサービスを作成するには、サービス定義ファイルで spec.type:NodePort を指定し、オプションで 30000~32767 の範囲のポートを指定します。

展開例

NodePort ベースのサービス (たとえば、apache アプリ) を使用しており、Ingress を使用して南北トラフィックにアプリを公開したいシナリオを考えてみましょう。この場合、apache アプリの展開を作成し、NodePort タイプのサービスを定義し、Ingress NetScaler が南北トラフィックを apache アプリのノードポートに送信するように構成する Ingress 定義を作成する必要があります。
この例では、apache という名前の展開を作成し、Kubernetes クラスターに展開します。
  1. apache-deployment.yaml という名前の展開のマニフェストを作成します。
    # If using this on GKE
    # Make sure you have cluster-admin role for your account
    # kubectl create clusterrolebinding citrix-cluster-admin --clusterrole=cluster-admin --user=<username of your google account>
    #

    #For illustration a basic apache web server is used as a application
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: apache
      labels:
          name: apache
    spec:
      selector:
        matchLabels:
          app: apache
      replicas: 4
      template:
        metadata:
          labels:
            app: apache
        spec:
          containers:
          - name: apache
            image: httpd:latest
            ports:
            - name: http
              containerPort: 80
            imagePullPolicy: IfNotPresent
    この展開のコンテナはポート 80 でリッスンします。
  2. 次のコマンドを使用して展開を作成します。
    kubectl create -f apache-deployment.yaml
  3. 次のコマンドを使用して、4 つのポッドが実行されていることを確認します。
    kubectl get pods
  4. ポッドが起動して実行されていることを確認したら、NodePort タイプのサービスを作成します。サービスの次のマニフェストです。
    #Expose the apache web server as a Service
    apiVersion: v1
    kind: Service
    metadata:
      name: apache
      labels:
        name: apache
    spec:
      type: NodePort
      ports:
      - name: http
        port: 80
        targetPort: http
      selector:
        app: apache
  5. マニフェストを apache-service.yaml という名前のファイルにコピーし、次のコマンドを使用してサービスを作成します。
    kubectl create -f apache-service.yaml
    このサンプルは、Apache Web サーバーをサービスとして展開および公開します。<NodeIP>:<NodePort> アドレスを使用してサービスにアクセスできます。
  6. サービスを展開したら、Ingress リソースを作成して、Ingress NetScaler が南北トラフィックを apache アプリのノードポートに送信するように構成します。vpx-ingress.yaml という名前の Ingress 定義のマニフェストは次のとおりです。
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        ingress.citrix.com/frontend-ip: xx.xxx.xxx.xx
      name: vpx-ingress
    spec:
      defaultBackend:
        service:
          name: apache
          port:
            number: 80
  7. Ingressオブジェクトをデプロイします。
    kubectl create -f vpx-ingress.yaml