NetScaler Ingressコントローラー

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

単一層展開では、Kubernetesクラスター外のIngress NetScaler(VPXまたはMPX)は、KubernetesクラスターにデプロイされたマイクロサービスへのすべてのIngressトラフィックを受信します。Ingress トラフィックがマイクロサービスに到達するには、Ingress NetScaler インスタンスとポッドの間にネットワーク接続を確立する必要があります。

ポッドはオーバーレイネットワークで実行されるため、ポッド IP アドレスはプライベート IP アドレスであり、Ingress NetScaler インスタンスはポッド内で実行されているマイクロサービスに到達できません。クラスターの外部からサービスにアクセスできるようにするには、 NodePortタイプのサービスを作成します。NetScaler インスタンスは、Ingress トラフィックをポッドを含むノードに負荷分散します。

NodePortタイプのサービスを作成するには、サービス定義ファイルで 30000 ~ 32767 の範囲のポートを指定し、必要に応じてspec.type:NodePortを指定します。

サンプルデプロイ

NodePort ベースのサービス (apacheアプリなど) を使用していて、Ingressを使用してそのアプリを North-South トラフィックに公開するシナリオを考えてみましょう。この場合、apacheアプリの展開を作成し、タイプNodePortのサービスを定義し 、Ingress NetScaler を構成して North-South トラフィックをapacheアプリのノードポートに送信するようにIngress Citrix ADCを構成する必要があります。

この例では、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
    <!--NeedCopy-->
    

    このデプロイメントのコンテナはポート 80 でリッスンします。

  2. 以下のコマンドを使用して、デプロイメントを作成します。

    kubectl create -f apache-deployment.yaml
    
  3. 以下を使用して、4 つの Pod が実行されていることを確認します。

    kubectl get pods
    
  4. Pod が稼働中であることを確認したら、タイプ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
    <!--NeedCopy-->
    
  5. マニフェストをapache-service.yamlという名前のファイルにコピーし、次のコマンドを使用してサービスを作成します。

    kubectl create -f apache-service.yaml
    

    このサンプルでは、Apache Web サーバーをサービスとしてデプロイして公開しています。 <NodeIP>:<NodePort> アドレスを使用してサービスにアクセスできます。

  6. サービスを展開したら、Ingress リソースを作成して、North-Southトラフィックをapacheアプリのノードポートに送信するように Ingress NetScaler を構成します。以下は、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
    <!--NeedCopy-->
    
  7. Ingress オブジェクトをデプロイします。

    kubectl create -f vpx-ingress.yaml
    
Ingress を使用して NodePort タイプのサービスを公開する

この記事の概要