2.8. アプリケーション用のロードバランサーのデプロイ
次の手順例では、ノード IP アドレスを LoadBalancer
サービス設定ファイルの外部 IP アドレスとして使用します。この例を、ロードバランサーをデプロイする方法のガイダンスとして使用します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - OVN-Kubernetes ネットワークプラグインで設定されたインフラストラクチャーにクラスターがインストールされている。
-
KUBECONFIG
環境変数が設定されている。
手順
次のコマンドを入力して、Pod が実行されていることを確認します。
$ oc get pods -A
出力例
NAMESPACE NAME READY STATUS RESTARTS AGE default i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr 1/1 Running 0 46m kube-system csi-snapshot-controller-5c6586d546-lprv4 1/1 Running 0 51m kube-system csi-snapshot-webhook-6bf8ddc7f5-kz6k9 1/1 Running 0 51m openshift-dns dns-default-45jl7 2/2 Running 0 50m openshift-dns node-resolver-7wmzf 1/1 Running 0 51m openshift-ingress router-default-78b86fbf9d-qvj9s 1/1 Running 0 51m openshift-multus dhcp-daemon-j7qnf 1/1 Running 0 51m openshift-multus multus-r758z 1/1 Running 0 51m openshift-operator-lifecycle-manager catalog-operator-85fb86fcb9-t6zm7 1/1 Running 0 51m openshift-operator-lifecycle-manager olm-operator-87656d995-fvz84 1/1 Running 0 51m openshift-ovn-kubernetes ovnkube-master-5rfhh 4/4 Running 0 51m openshift-ovn-kubernetes ovnkube-node-gcnt6 1/1 Running 0 51m openshift-service-ca service-ca-bf5b7c9f8-pn6rk 1/1 Running 0 51m openshift-storage topolvm-controller-549f7fbdd5-7vrmv 5/5 Running 0 51m openshift-storage topolvm-node-rht2m 3/3 Running 0 50m
次のコマンドを実行して、namespace を作成します。
$ NAMESPACE=<nginx-lb-test> 1
- 1
- _<nginx-lb-test> は、作成するアプリケーション namespace に置き換えます。
$ oc create ns $NAMESPACE
namespace の例
次の例では、
nginx
テストアプリケーションの 3 つのレプリカを、作成された namespace にデプロイします。oc apply -n $NAMESPACE -f - <<EOF apiVersion: v1 kind: ConfigMap metadata: name: nginx data: headers.conf: | add_header X-Server-IP \$server_addr always; --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: quay.io/packit/nginx-unprivileged imagePullPolicy: Always name: nginx ports: - containerPort: 8080 volumeMounts: - name: nginx-configs subPath: headers.conf mountPath: /etc/nginx/conf.d/headers.conf securityContext: allowPrivilegeEscalation: false seccompProfile: type: RuntimeDefault capabilities: drop: ["ALL"] runAsNonRoot: true volumes: - name: nginx-configs configMap: name: nginx items: - key: headers.conf path: headers.conf EOF
次のコマンドを実行すると、3 つのサンプルレプリカが正常に開始したことを確認できます。
$ oc get pods -n $NAMESPACE
次のコマンドを実行して、
nginx
テストアプリケーションのLoadBalancer
サービスを作成します。oc create -n $NAMESPACE -f - <<EOF apiVersion: v1 kind: Service metadata: name: nginx spec: ports: - port: 81 targetPort: 8080 selector: app: nginx type: LoadBalancer EOF
注記port
パラメーターが、他のLoadBalancer
サービスまたは MicroShift コンポーネントによって占有されていないホストポートであることを確認する必要があります。サービスファイルが存在し、外部 IP アドレスが適切に割り当てられていること、および外部 IP がノード IP と同一であることを確認するには、次のコマンドを実行します。
$ oc get svc -n $NAMESPACE
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 10.43.183.104 192.168.1.241 81:32434/TCP 2m
検証
次のコマンドは、LoadBalancer
サービス設定の外部 IP アドレスを使用して、例の nginx
アプリケーションへの 5 つの接続を形成します。コマンドの結果は、それらのサーバー IP アドレスのリストです。
次のコマンドを実行して、ロードバランサーが実行中のすべてのアプリケーションにリクエストを送信していることを確認します。
EXTERNAL_IP=192.168.1.241 seq 5 | xargs -Iz curl -s -I http://$EXTERNAL_IP:81 | grep X-Server-IP
LoadBalancer
サービスがトラフィックをアプリケーションに正常に分散している場合、前のコマンドの出力には異なる IP アドレスが含まれます。次に例を示します。出力例
X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.43 X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.43