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 クラスターにデプロイします。
-
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 でリッスンします。
-
以下のコマンドを使用して、デプロイメントを作成します。
kubectl create -f apache-deployment.yaml
-
以下を使用して、4 つの Pod が実行されていることを確認します。
kubectl get pods
-
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-->
-
マニフェストを
apache-service.yaml
という名前のファイルにコピーし、次のコマンドを使用してサービスを作成します。kubectl create -f apache-service.yaml
このサンプルでは、Apache Web サーバーをサービスとしてデプロイして公開しています。
<NodeIP>:<NodePort>
アドレスを使用してサービスにアクセスできます。 -
サービスを展開したら、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-->
-
Ingress オブジェクトをデプロイします。
kubectl create -f vpx-ingress.yaml