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: true
components
のみを指定することもできます。次に例を示します:components:
egressGateways:
- name: istio-egressgateway
enabled: true
YAML構成ファイルは、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モジュールのデプロイ」を参照してください。
モジュールの作成時に使用可能なオプションの完全なリストは、「プラットフォーム・コマンドライン・インタフェース」のolcnectl module create
コマンドを参照してください。
ノート:
Istioモジュールは、PrometheusモジュールとGrafanaモジュールの2つの他のモジュールをインストールします。 これらの2つのモジュールは、PrometheusおよびGrafanaをそれぞれインストールして、Kubernetesクラスタのモニタリングおよび可視化を有効にします。 Istioモジュールをインストールするときに、これらのモジュールに関する情報を提供する必要はありません。
Istioモジュールをデプロイするには:
-
環境をまだ設定していない場合は、モジュールをデプロイできる環境を作成します。 環境の設定方法の詳細は、スタート・ガイドを参照してください。 この例の環境名は、
myenvironment
です。 -
Kubernetesモジュールを設定またはデプロイしていない場合は、そのモジュールを設定します。 環境へのKubernetesモジュールの追加の詳細は、コンテナ・オーケストレーションを参照してください。 この例のKubernetesモジュール名は、
mycluster
です。 -
Helmモジュールを作成してインストールしていない場合は作成します。 この例のHelmモジュールは、
myhelm
という名前で、--helm-kubernetes-module
オプションを使用してmycluster
という名前のKubernetesモジュールに関連付けられています。olcnectl module create \ --environment-name myenvironment \ --module helm \ --name myhelm \ --helm-kubernetes-module mycluster
-
新しいHelmモジュールをデプロイする場合は、
olcnectl module install
コマンドを使用してHelmモジュールをインストールします。 たとえば:olcnectl module install \ --environment-name myenvironment \ --name myhelm
Helmソフトウェア・パッケージはコントロール・プレーン・ノードにインストールされ、HelmモジュールはKubernetesクラスタにデプロイされます。
-
Istioモジュールを作成し、
--istio-helm-module
オプションを使用して、myhelm
という名前のHelmモジュールに関連付けます。 この例では、Istioモジュールの名前はmyistio
です。olcnectl module create \ --environment-name myenvironment \ --module istio \ --name myistio \ --helm-kubernetes-module mycluster \ --istio-helm-module myhelm
--module
オプションでは、作成するモジュールのタイプ(istio
)を設定します。 Istioモジュールの名前(この例ではmyistio
)は、--name
オプションを使用して定義します。IstioモジュールにはKubernetesとHelmが必要になるため、それらのモジュールについてのオプションも指定する必要があります。
--helm-kubernetes-module
オプションでは、使用するKubernetesモジュールの名前を設定します。 Kubernetesモジュールは、設定またはデプロイされている必要があります。 デプロイされている既存のKubernetesモジュールがある場合は、このオプションを使用してモジュールの名前を指定できます。 指定した名前のKubernetesモジュールがデプロイされていない場合は、サービス・メッシュと同時にKubernetesをデプロイできる新しいモジュールがデプロイされます。--istio-helm-module
オプションでは、デプロイするHelmモジュールの名前を設定します。カスタム・プロファイルを使用して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 \ --helm-kubernetes-module mycluster \ --istio-helm-module myhelm \ --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
コマンドの構文の詳細は、「プラットフォーム・コマンドライン・インタフェース」を参照してください。
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.