7.5. 各メッシュのアプリケーションワークロードをデプロイする
アプリケーションワークロードをデプロイするには、各ワークロードを個別の namespace に割り当てます。
手順
次のコマンドを実行して、
app-ns-1
というアプリケーション namespace を作成します。oc create namespace app-ns-1
$ oc create namespace app-ns-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最初のコントロールプレーンによって namespace が検出されるようにするには、次のコマンドを実行して
istio-discovery=mesh-1
ラベルを追加します。oc label namespace app-ns-1 istio-discovery=mesh-1
$ oc label namespace app-ns-1 istio-discovery=mesh-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この namespace 内の Pod が最初のコントロールプレーンにマップされるようにしながら、すべての Pod へのサイドカーインジェクションをデフォルトで有効にするには、次のコマンドを実行して、namespace に
istio.io/rev=mesh-1
ラベルを追加します。oc label namespace app-ns-1 istio.io/rev=mesh-1
$ oc label namespace app-ns-1 istio.io/rev=mesh-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 次のコマンドを実行して、
mesh-1
リビジョン名を確認できます。oc get istiorevisions
$ oc get istiorevisions
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
sleep
およびhttpbin
アプリケーションをデプロイします。oc apply -n app-ns-1 \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml
$ oc apply -n app-ns-1 \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サイドカーがインジェクトされた状態で
httpbin
Pod およびsleep
Pod が実行されるまで待機します。oc get pods -n app-ns-1
$ oc get pods -n app-ns-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE httpbin-7f56dc944b-kpw2x 2/2 Running 0 2m26s sleep-5577c64d7c-b5wd2 2/2 Running 0 91m
NAME READY STATUS RESTARTS AGE httpbin-7f56dc944b-kpw2x 2/2 Running 0 2m26s sleep-5577c64d7c-b5wd2 2/2 Running 0 91m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
app-ns-2
という 2 番目のアプリケーション namespace を作成します。oc create namespace app-ns-2
$ oc create namespace app-ns-2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
app-ns-3
という 3 番目のアプリケーション namespace を作成します。oc create namespace app-ns-3
$ oc create namespace app-ns-3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ラベル
istio-discovery=mesh-2
を両方の namespace に追加し、リビジョンラベルmesh-2
を 2 番目のコントロールプレーンのディスカバリーセレクターと一致するように追加します。oc label namespace app-ns-2 app-ns-3 istio-discovery=mesh-2 istio.io/rev=mesh-2
$ oc label namespace app-ns-2 app-ns-3 istio-discovery=mesh-2 istio.io/rev=mesh-2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
sleep
およびhttpbin
アプリケーションをapp-ns-2
namespace にデプロイします。oc apply -n app-ns-2 \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml
$ oc apply -n app-ns-2 \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
sleep
およびhttpbin
アプリケーションをapp-ns-3
namespace にデプロイします。oc apply -n app-ns-3 \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml
$ oc apply -n app-ns-3 \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml \ -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 次のコマンドを使用して、デプロイメントが利用可能になるまで待機してください。
oc wait deployments -n app-ns-2 --all --for condition=Available
$ oc wait deployments -n app-ns-2 --all --for condition=Available
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
アプリケーションをデプロイした後、
istioctl ps
コマンドを使用して、各アプリケーションワークロードが割り当てられたコントロールプレーンによって管理されていることを確認します。次のコマンドを実行して、ワークロードが
istio-system-1
のコントロールプレーンに割り当てられていることを確認します。istioctl ps -i istio-system-1
$ istioctl ps -i istio-system-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION httpbin-7f56dc944b-vwfm5.app-ns-1 Kubernetes SYNCED (11m) SYNCED (11m) SYNCED (11m) SYNCED (11m) IGNORED istiod-mesh-1-b69646b6f-kxrwk 1.23.0 sleep-5577c64d7c-d675f.app-ns-1 Kubernetes SYNCED (11m) SYNCED (11m) SYNCED (11m) SYNCED (11m) IGNORED istiod-mesh-1-b69646b6f-kxrwk 1.23.0
NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION httpbin-7f56dc944b-vwfm5.app-ns-1 Kubernetes SYNCED (11m) SYNCED (11m) SYNCED (11m) SYNCED (11m) IGNORED istiod-mesh-1-b69646b6f-kxrwk 1.23.0 sleep-5577c64d7c-d675f.app-ns-1 Kubernetes SYNCED (11m) SYNCED (11m) SYNCED (11m) SYNCED (11m) IGNORED istiod-mesh-1-b69646b6f-kxrwk 1.23.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ワークロードが
istio-system-2
のコントロールプレーンに割り当てられていることを確認します。istioctl ps -i istio-system-2
$ istioctl ps -i istio-system-2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION httpbin-7f56dc944b-54gjs.app-ns-3 Kubernetes SYNCED (3m59s) SYNCED (3m59s) SYNCED (3m59s) SYNCED (3m59s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0 httpbin-7f56dc944b-gnh72.app-ns-2 Kubernetes SYNCED (4m1s) SYNCED (4m1s) SYNCED (3m59s) SYNCED (4m1s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0 sleep-5577c64d7c-k9mxz.app-ns-2 Kubernetes SYNCED (4m1s) SYNCED (4m1s) SYNCED (3m59s) SYNCED (4m1s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0 sleep-5577c64d7c-m9hvm.app-ns-3 Kubernetes SYNCED (4m1s) SYNCED (4m1s) SYNCED (3m59s) SYNCED (4m1s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0
NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION httpbin-7f56dc944b-54gjs.app-ns-3 Kubernetes SYNCED (3m59s) SYNCED (3m59s) SYNCED (3m59s) SYNCED (3m59s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0 httpbin-7f56dc944b-gnh72.app-ns-2 Kubernetes SYNCED (4m1s) SYNCED (4m1s) SYNCED (3m59s) SYNCED (4m1s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0 sleep-5577c64d7c-k9mxz.app-ns-2 Kubernetes SYNCED (4m1s) SYNCED (4m1s) SYNCED (3m59s) SYNCED (4m1s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0 sleep-5577c64d7c-m9hvm.app-ns-3 Kubernetes SYNCED (4m1s) SYNCED (4m1s) SYNCED (3m59s) SYNCED (4m1s) IGNORED istiod-mesh-2-8666fdfc6-mqp45 1.23.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
アプリケーションの接続がそれぞれのメッシュ内のワークロードに制限されていることを確認します。
次のコマンドを実行して、
app-ns-1
のsleep
Pod からapp-ns-2
のhttpbin
サービスにリクエストを送信し、通信が失敗するか確認します。oc -n app-ns-1 exec deploy/sleep -c sleep -- curl -sIL http://httpbin.app-ns-2.svc.cluster.local:8000
$ oc -n app-ns-1 exec deploy/sleep -c sleep -- curl -sIL http://httpbin.app-ns-2.svc.cluster.local:8000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 先ほど作成した
PeerAuthentication
リソースは、各メッシュ内でSTRICT
モードで相互 TLS (mTLS) トラフィックを強制します。各メッシュは、istio-ca-root-cert
config map によって管理される独自のルート証明書を使用します。これにより、メッシュ間の通信が阻止されます。出力は、次の例のように通信障害を示します。出力例
HTTP/1.1 503 Service Unavailable content-length: 95 content-type: text/plain date: Wed, 16 Oct 2024 12:05:37 GMT server: envoy
HTTP/1.1 503 Service Unavailable content-length: 95 content-type: text/plain date: Wed, 16 Oct 2024 12:05:37 GMT server: envoy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mesh-2
によって管理されているapp-ns-2
namespace にあるhttpbin
サービスにsleep
Pod からリクエストを送信して、通信が機能していることを確認します。以下のコマンドを実行します。oc -n app-ns-2 exec deploy/sleep -c sleep -- curl -sIL http://httpbin.app-ns-3.svc.cluster.local:8000
$ oc -n app-ns-2 exec deploy/sleep -c sleep -- curl -sIL http://httpbin.app-ns-3.svc.cluster.local:8000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow