Oracle Cloud Native EnvironmentでIstio Proxy Sidecarインジェクションを有効化

イントロダクション

Istioは、サービス間通信を処理するための個別のインフラストラクチャ・レイヤーを提供するサービス・メッシュです。ネットワーク通信はサービス自体から抽象化され、プロキシによって処理されます。Istioでは、サイドカー設計が使用されています。このデザインでは、通信プロキシがすべてのサービス・コンテナの横に独自のコンテナ内で実行されます。サイドカーの自動インジェクションを有効にするには、アプリケーションで使用するネームスペースに、istio-injection=enabledのラベルが付いている必要があります。

目的

このチュートリアルでは、自動プロキシ・サイドカー・インジェクションを有効にし、Oracle Cloud Native EnvironmentのIstioの機能を利用する方法を示します。

このチュートリアルでは、自動プロキシ・サイドカー・インジェクションを有効にせずにアプリケーションをデプロイします。次に、自動プロキシ・サイドカー・インジェクションを有効にし、アプリケーションを再度デプロイします。サービス・メッシュのポッドがIstio sidecarプロキシを実行していることを確認できます。

前提条件

Oracle Cloud Native Environmentリリース1.4 (Kubernetesクラスタを含む)をデプロイしました。次の場所にあるチュートリアルを参照してください。

高可用性Oracle Cloud Native Environmentのデプロイ

Oracle Cloud Native Environmentのデプロイ

Istioモジュールを使用してサービス・メッシュをデプロイする必要もあります。Istioモジュールのデプロイの詳細は、Oracle Cloud Native Environmentドキュメンテーションを参照してください。

Istioがインストールされ、実行されていることを確認します。

コントロール・プレーン・ノードで、次のコマンドを使用して、istio-systemネームスペースにデプロイメントを表示します。

kubectl get deployment -n istio-system

出力は次のようになります。

NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
grafana                2/2     2            2           2m44s
istio-egressgateway    2/2     2            2           2m48s
istio-ingressgateway   2/2     2            2           2m48s
istiod                 2/2     2            2           3m2s
prometheus-server      2/2     2            2           2m44s

単純なNGINXデプロイメントの作成

次のコマンドを使用して、nginxイメージを実行するhello-worldという名前の新しいデプロイメントを作成します。

kubectl create deployment --image container-registry.oracle.com/olcne/nginx:1.17.7 hello-world

デフォルト・ネームスペースでのKubernetesポッドの表示

次のコマンドを使用して、ポッドをリストします。

kubectl get pods

出力は次のようになります。

NAME              READY   STATUS    RESTARTS   AGE
hello-world-...   1/1     Running   0          18s

READY列は1/1で、Istio自動プロキシ・サイドカー・インジェクションが有効ではないことを示します。

NGINXデプロイメントの削除

次のコマンドを使用して、hello-worldデプロイメントを削除します。

kubectl delete deployments hello-world

自動プロキシ・サイドカー・インジェクションの有効化

サイドカーの自動インジェクションを有効にするには、アプリケーションで使用するネームスペースに、istio-injection=enabledのラベルが付いている必要があります。次の例では、デフォルトのネームスペースにラベルを付けます。

kubectl label namespace default istio-injection=enabled

kubectl get namespaceコマンドは、デフォルト・ネームスペースが正しくラベル付けされていることを確認します。

kubectl get namespace -L istio-injection

出力は次のようになります。

NAME                           STATUS   AGE   ISTIO-INJECTION
default                        Active   23m   enabled
externalip-validation-system   Active   22m   
istio-system                   Active   19m   
kube-node-lease                Active   23m   
kube-public                    Active   23m   
kube-system                    Active   23m   
kubernetes-dashboard           Active   22m   

デフォルトのネームスペースにISTIO_INJECTIONラベルが含まれていることがわかります。

単純なNGINXデプロイメントの作成

次のコマンドを使用して、nginxイメージを実行するhello-worldという名前の新しいデプロイメントを作成します。

kubectl create deployment --image container-registry.oracle.com/olcne/nginx:1.17.7 hello-world

デフォルト・ネームスペースでのKubernetesポッドの表示

kubectl get podsコマンドを使用して、ポッドをリストします。

kubectl get pods

出力は次のようになります。

NAME              READY   STATUS    RESTARTS   AGE
hello-world-...   2/2     Running   0          20s

READY列は2/2で、Istio自動プロキシ・サイドカー・インジェクションが有効であることと、メッシュ内のポッドがIstio sidecarプロキシを実行していることを示しています。

自動プロキシ・サイドカー・インジェクションの無効化

次に示すようにkubectl labelを使用して、デフォルト・ネームスペースからistio-injection=enabledラベルを削除します。

kubectl label namespace default istio-injection-

kubectl get namespaceコマンドは、ラベルがデフォルト・ネームスペースから削除されていることを確認します。

kubectl get namespace -L istio-injection

出力は次のようになります。

NAME                           STATUS   AGE   ISTIO-INJECTION
default                        Active   39m   
externalip-validation-system   Active   38m   
istio-system                   Active   36m   
kube-node-lease                Active   39m   
kube-public                    Active   39m   
kube-system                    Active   39m   
kubernetes-dashboard           Active   38m   

最後に、NGINXデプロイメントを削除します。

kubectl delete deployments hello-world

詳細情報

その他の学習リソース

docs.oracle.com/learnのその他のラボを確認するか、Oracle Learning YouTubeチャネルでより無料の学習コンテンツにアクセスします。また、education.oracle.com/learning-explorerにアクセスしてOracleラーニング・エクスプローラになることもできます。

製品ドキュメントは、Oracleヘルプ・センターを参照してください。