仮想マシンインストール
このガイドに従ってIstioをデプロイし、仮想マシンを接続してください。
前提条件
- Istioリリースのダウンロード
- 必要なプラットフォーム固有の設定を実行します。
- Podとサービスの要件を確認します。
- 仮想マシンは、接続するメッシュ内のイングレスゲートウェイにIP接続している必要があります。また、パフォーマンスを向上させるために、メッシュ内のすべてのPodにL3ネットワーク経由で接続することもできます。
- Istioの仮想マシン統合のハイレベルアーキテクチャを理解するために、仮想マシンアーキテクチャについて学習します。
ガイド環境の準備
仮想マシンの作成
クラスタ設定に使用しているマシンで、環境変数
VM_APP
、WORK_DIR
、VM_NAMESPACE
、SERVICE_ACCOUNT
を設定します。(例:WORK_DIR="${HOME}/vmintegration"
)$ VM_APP="<the name of the application this VM will run>" $ VM_NAMESPACE="<the name of your service namespace>" $ WORK_DIR="<a certificate working directory>" $ SERVICE_ACCOUNT="<name of the Kubernetes service account you want to use for your VM>" $ CLUSTER_NETWORK="" $ VM_NETWORK="" $ CLUSTER="Kubernetes"
$ VM_APP="<the name of the application this VM will run>" $ VM_NAMESPACE="<the name of your service namespace>" $ WORK_DIR="<a certificate working directory>" $ SERVICE_ACCOUNT="<name of the Kubernetes service account you want to use for your VM>" $ # Customize values for multi-cluster/multi-network as needed $ CLUSTER_NETWORK="kube-network" $ VM_NETWORK="vm-network" $ CLUSTER="cluster1"
クラスタ設定に使用しているマシンに作業ディレクトリを作成します。
$ mkdir -p "${WORK_DIR}"
Istioコントロールプレーンのインストール
クラスタに既にIstioコントロールプレーンがある場合は、インストール手順をスキップできますが、仮想マシンからアクセスできるようにコントロールプレーンを公開する必要があります。
Istioをインストールし、仮想マシンからアクセスできるようにクラスタ上のコントロールプレーンを公開します。
インストールのための
IstioOperator
仕様を作成します。$ cat <<EOF > ./vm-cluster.yaml apiVersion: install.istio.io/v1alpha1 kind: IstioOperator metadata: name: istio spec: values: global: meshID: mesh1 multiCluster: clusterName: "${CLUSTER}" network: "${CLUSTER_NETWORK}" EOF
Istioをインストールします。
$ istioctl install -f vm-cluster.yaml
$ istioctl install -f vm-cluster.yaml --set values.pilot.env.PILOT_ENABLE_WORKLOAD_ENTRY_AUTOREGISTRATION=true --set values.pilot.env.PILOT_ENABLE_WORKLOAD_ENTRY_HEALTHCHECKS=true
東西ゲートウェイのデプロイ
$ @samples/multicluster/gen-eastwest-gateway.sh@ --single-cluster | istioctl install -y -f -
$ @samples/multicluster/gen-eastwest-gateway.sh@ \ --network "${CLUSTER_NETWORK}" | \ istioctl install -y -f -
東西ゲートウェイを介してクラスタ内のサービスを公開します。
コントロールプレーンの公開
$ kubectl apply -n istio-system -f @samples/multicluster/expose-istiod.yaml@
コントロールプレーンの公開
$ kubectl apply -n istio-system -f @samples/multicluster/expose-istiod.yaml@
クラスタサービスの公開
$ kubectl apply -n istio-system -f @samples/multicluster/expose-services.yaml@
定義されたクラスタネットワークでistio-system名前空間をラベル付けしてください。
$ kubectl label namespace istio-system topology.istio.io/network="${CLUSTER_NETWORK}"
VM名前空間の設定
仮想マシンをホストする名前空間を作成します。
$ kubectl create namespace "${VM_NAMESPACE}"
仮想マシンのためのserviceaccountを作成します。
$ kubectl create serviceaccount "${SERVICE_ACCOUNT}" -n "${VM_NAMESPACE}"
仮想マシンに転送するファイルの作成
まず、VMのテンプレートWorkloadGroup
を作成します。
$ cat <<EOF > workloadgroup.yaml
apiVersion: networking.istio.io/v1
kind: WorkloadGroup
metadata:
name: "${VM_APP}"
namespace: "${VM_NAMESPACE}"
spec:
metadata:
labels:
app: "${VM_APP}"
template:
serviceAccount: "${SERVICE_ACCOUNT}"
network: "${VM_NETWORK}"
EOF
まず、VMのテンプレートWorkloadGroup
を作成します。
$ cat <<EOF > workloadgroup.yaml
apiVersion: networking.istio.io/v1
kind: WorkloadGroup
metadata:
name: "${VM_APP}"
namespace: "${VM_NAMESPACE}"
spec:
metadata:
labels:
app: "${VM_APP}"
template:
serviceAccount: "${SERVICE_ACCOUNT}"
network: "${VM_NETWORK}"
EOF
次に、自動WorkloadEntry
の作成を許可するために、WorkloadGroup
をクラスタにプッシュします。
$ kubectl --namespace "${VM_NAMESPACE}" apply -f workloadgroup.yaml
自動WorkloadEntry
作成機能を使用すると、アプリケーションのヘルスチェックも利用できます。これらは、Kubernetes Readiness Probesと同じAPIと動作を共有しています。
例えば、アプリケーションの/ready
エンドポイントにプローブを設定するには
$ cat <<EOF > workloadgroup.yaml
apiVersion: networking.istio.io/v1
kind: WorkloadGroup
metadata:
name: "${VM_APP}"
namespace: "${VM_NAMESPACE}"
spec:
metadata:
labels:
app: "${VM_APP}"
template:
serviceAccount: "${SERVICE_ACCOUNT}"
network: "${NETWORK}"
probe:
periodSeconds: 5
initialDelaySeconds: 1
httpGet:
port: 8080
path: /ready
EOF
この設定により、プローブが成功するまで、自動的に生成されたWorkloadEntry
は「準備完了」とマークされません。
次に、istioctl x workload entry
コマンドを使用して生成します。
cluster.env
: 名前空間、サービスアカウント、ネットワークCIDR、(オプションで)キャプチャするインバウンドポートを識別するメタデータが含まれています。istio-token
: CAから証明書を取得するために使用されるKubernetesトークンです。mesh.yaml
:discoveryAddress
、ヘルスチェックプローブ、いくつかの認証オプションを設定するためのProxyConfig
を提供します。root-cert.pem
: 認証に使用されるルート証明書です。hosts
: プロキシがxDSのためにistiodに到達するために使用する/etc/hosts
への追加です。
$ istioctl x workload entry configure -f workloadgroup.yaml -o "${WORK_DIR}" --clusterID "${CLUSTER}"
$ istioctl x workload entry configure -f workloadgroup.yaml -o "${WORK_DIR}" --clusterID "${CLUSTER}" --autoregister
仮想マシンの設定
Istioメッシュに追加する仮想マシンで次のコマンドを実行します。
"${WORK_DIR}"
から仮想マシンにファイルを安全に転送します。ファイルを安全に転送する方法については、情報セキュリティポリシーを考慮して決定する必要があります。このガイドでは便宜上、必要なすべてのファイルを仮想マシンの"${HOME}"
に転送します。ルート証明書を
/etc/certs
にインストールします。$ sudo mkdir -p /etc/certs $ sudo cp "${HOME}"/root-cert.pem /etc/certs/root-cert.pem
トークンを
/var/run/secrets/tokens
にインストールします。$ sudo mkdir -p /var/run/secrets/tokens $ sudo cp "${HOME}"/istio-token /var/run/secrets/tokens/istio-token
Istio仮想マシン統合ランタイムを含むパッケージをインストールします。
$ curl -LO https://storage.googleapis.com/istio-release/releases/1.24.0/deb/istio-sidecar.deb $ sudo dpkg -i istio-sidecar.deb
注: 現在サポートされているのはCentOS 8のみです。
$ curl -LO https://storage.googleapis.com/istio-release/releases/1.24.0/rpm/istio-sidecar.rpm $ sudo rpm -i istio-sidecar.rpm
cluster.env
を/var/lib/istio/envoy/
ディレクトリにインストールします。$ sudo cp "${HOME}"/cluster.env /var/lib/istio/envoy/cluster.env
メッシュ構成を
/etc/istio/config/mesh
にインストールします。$ sudo cp "${HOME}"/mesh.yaml /etc/istio/config/mesh
/etc/hosts
にistiodホストを追加します。$ sudo sh -c 'cat $(eval echo ~$SUDO_USER)/hosts >> /etc/hosts'
/etc/certs/
および/var/lib/istio/envoy/
内のファイルの所有権をIstioプロキシに変更します。$ sudo mkdir -p /etc/istio/proxy $ sudo chown -R istio-proxy /var/lib/istio /etc/certs /etc/istio/proxy /etc/istio/config /var/run/secrets /etc/certs/root-cert.pem
仮想マシン内でIstioの起動
Istioエージェントを起動します。
$ sudo systemctl start istio
Istioの正常動作の検証
/var/log/istio/istio.log
のログを確認します。次のようなエントリが表示されるはずです。$ 2020-08-21T01:32:17.748413Z info sds resource:default pushed key/cert pair to proxy $ 2020-08-21T01:32:20.270073Z info sds resource:ROOTCA new connection $ 2020-08-21T01:32:20.270142Z info sds Skipping waiting for gateway secret $ 2020-08-21T01:32:20.270279Z info cache adding watcher for file ./etc/certs/root-cert.pem $ 2020-08-21T01:32:20.270347Z info cache GenerateSecret from file ROOTCA $ 2020-08-21T01:32:20.270494Z info sds resource:ROOTCA pushed root cert to proxy $ 2020-08-21T01:32:20.270734Z info sds resource:default new connection $ 2020-08-21T01:32:20.270763Z info sds Skipping waiting for gateway secret $ 2020-08-21T01:32:20.695478Z info cache GenerateSecret default $ 2020-08-21T01:32:20.695595Z info sds resource:default pushed key/cert pair to proxy
Podベースのサービスをデプロイするための名前空間の作成
$ kubectl create namespace sample $ kubectl label namespace sample istio-injection=enabled
HelloWorld
サービスのデプロイ$ kubectl apply -n sample -f @samples/helloworld/helloworld.yaml@
仮想マシンからサービスへのリクエストを送信します。
$ curl helloworld.sample.svc:5000/hello Hello version: v1, instance: helloworld-v1-578dd69f69-fxwwk
次の手順
仮想マシンに関する詳細情報
- 仮想マシンの問題をトラブルシューティングするには、仮想マシンのデバッグを参照してください。
- 仮想マシンの例となるデプロイメントを設定するには、Bookinfo with a Virtual Machineを参照してください。
アンインストール
仮想マシンでIstioを停止します。
$ sudo systemctl stop istio
次に、Istio-sidecarパッケージを削除します。
$ sudo dpkg -r istio-sidecar
$ dpkg -s istio-sidecar
$ sudo rpm -e istio-sidecar
Istioをアンインストールするには、次のコマンドを実行します。
$ kubectl delete -n istio-system -f @samples/multicluster/expose-istiod.yaml@
$ istioctl uninstall -y --purge
コントロールプレーン名前空間(例: istio-system
)はデフォルトでは削除されません。不要になった場合は、次のコマンドを使用して削除します。
$ kubectl delete namespace istio-system