2 サービス・メッシュの設定
重要:
このドキュメントで説明されているソフトウェアは、Extended SupportまたはSustaining Supportにあります。 詳細は、「Oracleオープン・ソース・サポート・ポリシー」を参照してください。
このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお勧めします。
この項では、サービス・メッシュを設定するためにIstioモジュールをインストールする方法と、そのときにデプロイするコンポーネントについて説明します。
Istioモジュールは、ほとんど空のプロファイルを使用してインストールされます。 デフォルトのIstioモジュール・プロファイルには、プロファイル名、コンテナ・イメージ・ハブおよびコンテナ・イメージ・タグが含まれます。 Istioモジュールのインストールをカスタマイズする場合は、カスタムIstioプロファイルを使用できます。 これにより、Kubernetesリソース設定の設定、個々のIstioコンポーネントの有効化または無効化、およびその設定の構成を行うことができます。
これらのコンポーネントをカスタマイズするには、これらの設定用のYAML構成ファイルを記述し、Istioモジュールのデプロイ時に使用します。 さまざまな構成を持つ複数のIstioモジュールを、すべて同じIstioコントロール・プレーンを使用してデプロイできます。
構成ファイルを使用して単一のカスタムIstioモジュールをデプロイすることも、複数のIstioモジュールをデプロイすることもできます。 複数のIstioモジュールをデプロイする場合は、Istioコントロール・プレーンとして機能するデフォルト・モジュールとして初期モジュールを設定する必要があります。 このデフォルト・モジュールは、「親」 Istioモジュールとみなされます。 親Istioモジュールは、デフォルトのプロファイルを使用してインストールされます。
構成ファイルの作成
カスタマイズされたIstioモジュールをインストールするには、YAML構成ファイルを作成して構成オプションを指定する必要があります。 構成を設定するには、IstioOperatorリソース・ファイルのspecセクションを使用します。 構成ファイルで使用できるオプションの詳細は、次の場所にあるIstioOperatorリソースに関するアップストリームのドキュメントを参照してください:
https://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/
構成ファイルに完全なIstioOperatorファイルを含めないでください。specセクションの下にあるオプションのみを使用してください。 つまり、構成ファイルに次の行を含めないでください:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:profile: myistio
hub: myhub.example
components:
egressGateways:
- name: istio-egressgateway
enabled: truecomponentsのみを指定することもできます。次に例を示します:components:
egressGateways:
- name: istio-egressgateway
enabled: trueYAML構成ファイルは、Istioモジュールの作成時にolcnectl module createコマンドで使用されます。
例2-1 Istioイングレス・ゲートウェイのロード・バランサを設定するための単純な構成ファイル
この例のIstio構成ファイルでは、Oracle Cloud Infrastructure Cloud Controller Managerモジュールを使用して、適切な注釈をistio-ingressgatewayサービスに適用してこれを設定することで、Istioイングレス・ゲートウェイの「Oracle Cloud Infrastructureロード・バランサ」をプロビジョニングします。
ノート:
この例を試すには、Oracle Cloud Infrastructure Cloud Controller Managerモジュールがインストールされている必要があります。
YAML構成ファイルには次のものが含まれます:
components:
ingressGateways:
- name: istio-ingressgateway
k8s:
serviceAnnotations:
service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None"
service.beta.kubernetes.io/oci-load-balancer-internal: "true"
service.beta.kubernetes.io/oci-load-balancer-shape: "flexible"
service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10"
service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "10"
含めることができるOracle Cloud Infrastructure Cloud Controller Manager注釈の完全なリストは、次の場所にあるアップストリームのドキュメントを参照してください:
https://github.com/oracle/oci-cloud-controller-manager/blob/master/docs/load-balancer-annotations.md
この構成ファイルを使用してIstioモジュールをデプロイすると、istio-systemネームスペースにデプロイされた次のKubernetesサービスが表示されます。 コントロール・プレーン・ノードで、istio-systemネームスペースのサービスを表示します。
kubectl --namespace istio-system get svc
出力は次のようになります:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) ...
grafana ClusterIP 10.97.12.24 <none> 3000/TCP ...
istio-egressgateway ClusterIP 10.106.217.129 <none> 80/TCP,443/TCP,1544...
istio-ingressgateway LoadBalancer 10.103.9.119 100.102.106.171 15021:30762/TCP,80:...
istiod ClusterIP 10.106.101.205 <none> 15010/TCP,15012/TCP...
prometheus-server ClusterIP 10.107.228.56 <none> 9090/TCP ...
istio-ingressgatewayサービスがタイプLoadBalancerで、externalIPが関連付けられていることがわかります。
例2-2 Istioイングレス・ゲートウェイのロード・バランサを設定するための詳細構成ファイル
この構成ファイル例では、myistioという名前のネームスペースにmy-istio-ingressgatewayという名前のIstioイングレス・ゲートウェイを作成するプロファイルを使用してIstioモジュールを作成します。 この例では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールを使用してIstioイングレス・ゲートウェイの「Oracle Cloud Infrastructureロード・バランサ」をプロビジョニングし、ゲートウェイの構成方法の詳細も示します。
ノート:
この例を試すには、Oracle Cloud Infrastructure Cloud Controller Managerモジュールがインストールされている必要があります。
YAML構成ファイルには次のものが含まれます:
components:
ingressGateways:
- enabled: true
k8s:
hpaSpec:
maxReplicas: 5
minReplicas: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-istio-ingressgateway
resources:
limits:
cpu: 2000m
memory: 1024Mi
requests:
cpu: 100m
memory: 128Mi
serviceAnnotations:
service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None"
service.beta.kubernetes.io/oci-load-balancer-internal: "true"
service.beta.kubernetes.io/oci-load-balancer-shape: "flexible"
service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10"
service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "10"
service:
ports:
- name: status-port
port: 15021
protocol: TCP
targetPort: 15021
- name: http2
port: 80
protocol: TCP
targetPort: 8080
- name: https
port: 443
protocol: TCP
targetPort: 8443
- name: tcp-istiod
port: 15012
protocol: TCP
targetPort: 15012
- name: tls
port: 15443
protocol: TCP
targetPort: 15443
strategy:
rollingUpdate:
maxSurge: 100%
maxUnavailable: 25%
name: my-istio-ingressgateway
namespace: myistio
values:
gateways:
istio-ingressgateway:
autoscaleEnabled: true
env: {}
name: istio-ingressgateway
secretVolumes:
- mountPath: /etc/istio/ingressgateway-certs
name: ingressgateway-certs
secretName: istio-ingressgateway-certs
- mountPath: /etc/istio/ingressgateway-ca-certs
name: ingressgateway-ca-certs
secretName: istio-ingressgateway-ca-certs
type: LoadBalancer
この例では、my-istio-ingressgatewayという名前のIstioイングレス・ゲートウェイは、myistioという名前のネームスペースにあります。 このネームスペースは、istio-systemのデフォルトのIstioネームスペースではありません。 この例に示すように、デフォルト以外のネームスペースにゲートウェイ・サービスをインストールする場合は、最初にネームスペースを作成する必要があります。 コントロール・プレーン・ノードでkubectl create namespaceコマンドを使用して、新しいネームスペースを作成します。 たとえば、コントロール・プレーン・ノードの場合:
kubectl create namespace myistio
この構成ファイルを使用してIstioモジュールをデプロイすると、デフォルトのistio-systemネームスペースにデプロイされた次のKubernetesサービスが表示されます。 コントロール・プレーン・ノードで、istio-systemネームスペースのサービスを表示します。
kubectl --namespace istio-system get svc
出力は次のようになります:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) ...
grafana ClusterIP 10.103.216.188 <none> 3000/TCP ...
istio-egressgateway ClusterIP 10.111.113.121 <none> 80/TCP,443/TCP,15443/TC...
istio-ingressgateway LoadBalancer 10.106.116.57 <pending> 15021:30210/TCP,80:3193...
istiod ClusterIP 10.99.54.66 <none> 15010/TCP,15012/TCP,443...
prometheus-server ClusterIP 10.110.20.110 <none> 9090/TCP ...
istio-ingressgatewayサービスのタイプはLoadBalancerで、externalIPが関連付けられていません(pending状態です)。 これはデプロイされるデフォルトのサービスであり、デフォルトのIstio構成を使用して設定されます。
my-isitio-ingressgatewayという名前のイングレス・ゲートウェイ・サービスを表示するには、myistioネームスペースで実行されているサービスを取得します。 コントロール・プレーン・ノードで、myistioネームスペースのサービスを表示します。
kubectl --namespace myistio get svc
出力は次のようになります:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) ...
my-istio-ingressgateway LoadBalancer 10.96.174.73 100.102.107.82 15021:30292/TCP,80:3...
my-istio-ingressgatewayサービスがタイプLoadBalancerで、externalIPが関連付けられていることがわかります。 これは、構成ファイルを使用して作成されたサービスです。
Istioモジュールのデプロイ
単一のolcnectl module createコマンドを使用して、サービス・メッシュおよびKubernetesクラスタの作成に必要なすべてのモジュールをデプロイできます。 この方法は、Kubernetesクラスタのデプロイと同時にサービス・メッシュをデプロイする場合に役立つことがあります。
既存のKubernetesモジュールのデプロイメントがある場合、そのインスタンスは、サービス・メッシュのデプロイ時に指定できます。
構成ファイルを使用してカスタムIstioモジュールを作成できます。 これにより、Kubernetesリソース設定の設定、個々のIstioコンポーネントの有効化または無効化、およびその設定の構成を行うことができます。 Istioモジュールのカスタム・プロファイルの作成の詳細は、「構成ファイルの作成」を参照してください。
構成ファイルを使用して複数のカスタムIstioモジュールをインストールする場合は、「複数のカスタムIstioモジュールのデプロイ」を参照してください。
モジュールの作成時に使用可能なオプションの完全なリストは、「Platform Command-Line Interface」のolcnectl module createコマンドを参照してください。
ノート:
Istioモジュールは、PrometheusモジュールとGrafanaモジュールの2つの他のモジュールをインストールします。 これらの2つのモジュールは、PrometheusおよびGrafanaをそれぞれインストールして、Kubernetesクラスタのモニタリングおよび可視化を有効にします。 Istioモジュールをインストールするときに、これらのモジュールに関する情報を提供する必要はありません。
Istioモジュールをデプロイするには:
-
環境をまだ設定していない場合は、モジュールをデプロイできる環境を作成します。 環境の設定の詳細は、「スタート・ガイド」を参照してください。 この例の環境名は、
myenvironmentです。 -
Kubernetesモジュールを設定またはデプロイしていない場合は、そのモジュールを設定します。 Kubernetesモジュールを環境に追加する方法の詳細は、「コンテナ・オーケストレーション」を参照してください。 この例のKubernetesモジュール名は、
myclusterです。 -
Istioモジュールを作成し、
--istio-kubernetes-moduleオプションを使用して、myclusterという名前のKubernetesモジュールに関連付けます。 この例では、Istioモジュールの名前はmyistioです。olcnectl module create \ --environment-name myenvironment \ --module istio \ --name myistio \ --istio-kubernetes-module mycluster
--moduleオプションでは、作成するモジュールのタイプ(istio)を設定します。 Istioモジュールの名前(この例ではmyistio)は、--nameオプションを使用して定義します。IstioモジュールにはKubernetesが必要であるため、そのモジュールのオプションも指定する必要があります。
--istio-kubernetes-moduleオプションは、使用するKubernetesモジュールの名前を設定します。 Kubernetesモジュールは、設定またはデプロイされている必要があります。 デプロイされている既存のKubernetesモジュールがある場合は、このオプションを使用してモジュールの名前を指定できます。 指定した名前のKubernetesモジュールがデプロイされていない場合は、サービス・メッシュと同時にKubernetesをデプロイできる新しいモジュールがデプロイされます。カスタム・プロファイルを使用してIstioモジュールをインストールする場合は、
--istio-profileオプションを含めて、YAML構成ファイルのロケーションを指定します。 Platform API Serverは、構成ファイル内の設定を使用してIstioモジュールを構成します。モジュールの追加時に必要なオプションが一部でも含まれていないと、そのオプションを指定するように求められます。
-
olcnectl module installコマンドを使用して、Istioモジュールをインストールします。 たとえば:olcnectl module install \ --environment-name myenvironment \ --name myistio
Istioソフトウェア・パッケージはコントロール・プレーン・ノードにインストールされ、IstioモジュールはKubernetesクラスタにデプロイされます。
複数のカスタムIstioモジュールのデプロイ
複数のIstioモジュールをデプロイする場合は、デフォルト・プロファイルを使用してIstioモジュールを「親」モジュールとして作成する必要があります。 これにより、カスタムIstioモジュールを管理するための単一のIstioコントロール・プレーンが作成されます。 これを行うには、プロファイル構成ファイルなしでIstioモジュールをデプロイします。 次に、追加のIstioモジュールをそれぞれのプロファイル構成ファイルとともにデプロイし、--istio-parentオプションを使用して親モジュールを設定します。
複数のIstioモジュールをデプロイするには:
- 「Istioモジュールのデプロイ」のステップに従って、親モジュールとして機能するデフォルトのIstioモジュールを設定します。 Istioモジュールを作成するときは、カスタム・プロファイル構成ファイルを含めないでください。
-
YAML構成ファイルを使用して2つ目のIstioモジュールを作成します。
olcnectl module createコマンドを使用して、モジュールを作成します。olcnectl module create \ --environment-name myenvironment \ --module istio \ --name mycustomistio \ --istio-kubernetes-module mycluster \ --istio-parent myistio \ --istio-profile mycustomistio.yaml--nameオプションは、この2番目のIstioモジュールの名前を設定します。 この例では、mycustomistioに設定されています。--istio-parentオプションは、親Istioモジュールの名前を設定します。 この例では、親Istioモジュールの名前はmyistioで、これは「Istioモジュールのデプロイ」の例で使用されているIstioモジュールの名前でもあります。--istio-profileオプションは、YAML構成ファイルのロケーションを設定します。 -
olcnectl module installコマンドを使用して、Istioモジュールをインストールします。 たとえば:olcnectl module install \ --environment-name myenvironment \ --name mycustomistio -
親Istioコントロール・プレーンにカスタムIstioモジュールを追加するには、異なるモジュール名、構成ファイルを使用して追加のIstioモジュールを作成し、親モジュールを指定します。
Istioモジュールのデプロイメントの検証
Istioモジュールがデプロイされていることと、必要なコンテナがistio-systemネームスペースで実行されていることを確認できます。 コンテナがデプロイされていることを確認するには、kubectlコマンドを使用する必要があります。 kubectlコマンドの設定の詳細は、「コンテナ・オーケストレーション」を参照してください。
必要なコンテナが実行中であることを確認するには、制御計画ノードで、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
Istioモジュールとそのプロパティに関する情報を確認することもできます。
オペレータ・ノードで、olcnectl module reportコマンドを使用してモジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironmentのmyistioという名前のIstioモジュールを確認します:
olcnectl module report \ --environment-name myenvironment \ --name myistio \ --children
olcnectl module reportコマンドの構文の詳細は、「Platform Command-Line Interface」を参照してください。
Istioモジュールの削除
Kubernetesクラスタは残したままにして、サービス・メッシュのデプロイメントを削除できます。 そうするには、環境からIstioモジュールを削除します。
olcnectl module uninstallコマンドを使用して、Istioモジュールを削除します。 たとえば、myenvironmentという環境内のmyistioというIstioモジュールを削除するには、次のようにします。
olcnectl module uninstall \ --environment-name myenvironment \ --name myistio
IstioモジュールとそのサポートするPrometheusおよびGrafanaモジュールは、環境から削除されます。
olcnectl module instancesコマンドを使用して、Istio、PrometheusおよびGrafanaモジュールが削除されたことを確認できます。 これらの3つのモジュールは、環境内のモジュールとしてリストされなくなりました。
また、コントロール・プレーン・ノードのkubectlコマンドを使用して、istio-systemネームスペースで実行されているすべてのデプロイメントを問い合せると、Istioコンポーネントが削除されていることを確認できます。 戻されるデプロイメントが存在しないことを確認します。
kubectl get deployment -n istio-system No resources found in istio-system namespace.