2 Istioモジュールのインストール
この項では、サービス・メッシュを設定するためにIstioモジュールをインストールする方法と、そのときにデプロイするコンポーネントについて説明します。
Istioモジュールは、ほとんど空のプロファイルを使用してインストールされます。 デフォルトのIstioモジュール・プロファイルには、プロファイル名、コンテナ・イメージ・ハブおよびコンテナ・イメージ・タグが含まれます。 Istioモジュールのインストールをカスタマイズするには、カスタムIstioプロファイルを使用します。 これにより、Kubernetesリソース設定の設定、個々のIstioコンポーネントの有効化または無効化、およびその設定の構成を行うことができます。
これらのコンポーネントをカスタマイズするには、これらの設定用のYAML構成ファイルを記述し、Istioモジュールのデプロイ時に使用します。 さまざまな構成を持つ複数のIstioモジュールを、すべて同じIstioコントロール・プレーンを使用してデプロイできます。
構成ファイルを使用して単一のカスタムIstioモジュールをデプロイすることも、複数のIstioモジュールをデプロイすることもできます。 複数のIstioモジュールをデプロイするには、初期モジュールをデフォルト・モジュールとして設定する必要があります。これはIstioコントロール・プレーンとして機能します。 このデフォルト・モジュールは、「親」 Istioモジュールとみなされます。 親Istioモジュールは、デフォルトのプロファイルを使用してインストールされます。
構成ファイルの作成
カスタマイズされたIstioモジュールをインストールするには、YAML構成ファイルを作成して構成オプションを指定する必要があります。 構成を設定するには、IstioOperatorリソース・ファイルのspec
セクションを使用します。 構成ファイルで使用できるオプションの詳細は、アップストリームの「Istioドキュメント」にあるIstioOperatorリソースを参照してください。
構成ファイルに完全な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モジュールは、他の2つのモジュール、PrometheusモジュールおよびGrafanaモジュールをインストールします。 これらの2つのモジュールは、PrometheusおよびGrafanaをインストールして、Kubernetesクラスタのモニタリングと可視化を有効にします。 Istioモジュールをインストールするときに、これらのモジュールの情報を指定する必要はありません。
Istioモジュールをデプロイするには:
-
環境をまだ設定していない場合は、モジュールをデプロイできる環境を作成します。 環境の設定方法の詳細は、スタート・ガイドを参照してください。 この例の環境名は、
myenvironment
です。 -
Kubernetesモジュールをまだ設定またはデプロイしていない場合は、設定します。 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
コマンドの設定の詳細は、「Kubernetesモジュール」を参照してください。
必要なコンテナが実行中であることを確認するには、制御計画ノードで、istio-system
ネームスペースで実行されているコンテナをリストします。
kubectl get deployment --namespace 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
コマンドの構文の詳細は、「プラットフォーム・コマンドライン・インタフェース」を参照してください。