機械翻訳について

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:
構成ファイルには、設定するIstioOperator構成を含める必要があります。次に例を示します:
profile: myistio
hub: myhub.example
components:
  egressGateways:
  - name: istio-egressgateway
    enabled: true
または、カスタマイズするIstioOperator 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モジュールをデプロイするには:

  1. 環境をまだ設定していない場合は、モジュールをデプロイできる環境を作成します。 環境の設定方法の詳細は、スタート・ガイドを参照してください。 この例の環境名は、myenvironmentです。

  2. Kubernetesモジュールを設定またはデプロイしていない場合は、そのモジュールを設定します。 環境へのKubernetesモジュールの追加の詳細は、コンテナ・オーケストレーションを参照してください。 この例のKubernetesモジュール名は、myclusterです。

  3. Helmモジュールを作成してインストールしていない場合は作成します。 この例のHelmモジュールは、myhelmという名前で、--helm-kubernetes-moduleオプションを使用してmyclusterという名前のKubernetesモジュールに関連付けられています。

    olcnectl module create \
    --environment-name myenvironment \
    --module helm \
    --name myhelm \
    --helm-kubernetes-module mycluster 
  4. 新しいHelmモジュールをデプロイする場合は、olcnectl module installコマンドを使用してHelmモジュールをインストールします。 たとえば:

    olcnectl module install \
    --environment-name myenvironment \
    --name myhelm 

    Helmソフトウェア・パッケージはコントロール・プレーン・ノードにインストールされ、HelmモジュールはKubernetesクラスタにデプロイされます。

  5. 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モジュールを構成します。

    モジュールの追加時に必要なオプションが一部でも含まれていないと、そのオプションを指定するように求められます。

  6. 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モジュールをデプロイするには:

  1. 「Istioモジュールのデプロイ」のステップに従って、親モジュールとして機能するデフォルトのIstioモジュールを設定します。 Istioモジュールを作成するときは、カスタム・プロファイル構成ファイルを含めないでください。
  2. 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構成ファイルのロケーションを設定します。

  3. olcnectl module installコマンドを使用して、Istioモジュールをインストールします。 たとえば:

    olcnectl module install \
    --environment-name myenvironment \
    --name mycustomistio 
  4. 親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コマンドを使用してモジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironmentmyistioという名前の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.