仮想マシンインストール

このガイドに従ってIstioをデプロイし、仮想マシンを接続してください。

前提条件

  1. Istioリリースのダウンロード
  2. 必要なプラットフォーム固有の設定を実行します。
  3. Podとサービスの要件を確認します。
  4. 仮想マシンは、接続するメッシュ内のイングレスゲートウェイにIP接続している必要があります。また、パフォーマンスを向上させるために、メッシュ内のすべてのPodにL3ネットワーク経由で接続することもできます。
  5. Istioの仮想マシン統合のハイレベルアーキテクチャを理解するために、仮想マシンアーキテクチャについて学習します。

ガイド環境の準備

  1. 仮想マシンの作成

  2. クラスタ設定に使用しているマシンで、環境変数VM_APPWORK_DIRVM_NAMESPACESERVICE_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"
    
  3. クラスタ設定に使用しているマシンに作業ディレクトリを作成します。

    $ mkdir -p "${WORK_DIR}"
    

Istioコントロールプレーンのインストール

クラスタに既にIstioコントロールプレーンがある場合は、インストール手順をスキップできますが、仮想マシンからアクセスできるようにコントロールプレーンを公開する必要があります。

Istioをインストールし、仮想マシンからアクセスできるようにクラスタ上のコントロールプレーンを公開します。

  1. インストールのための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
    
  2. Istioをインストールします。

    $ istioctl install -f vm-cluster.yaml
    
  3. 東西ゲートウェイのデプロイ

    Zip
    $ @samples/multicluster/gen-eastwest-gateway.sh@ --single-cluster | istioctl install -y -f -
    
  4. 東西ゲートウェイを介してクラスタ内のサービスを公開します。

    コントロールプレーンの公開

    Zip
    $ kubectl apply -n istio-system -f @samples/multicluster/expose-istiod.yaml@
    

VM名前空間の設定

  1. 仮想マシンをホストする名前空間を作成します。

    $ kubectl create namespace "${VM_NAMESPACE}"
    
  2. 仮想マシンのための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

次に、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}"

仮想マシンの設定

Istioメッシュに追加する仮想マシンで次のコマンドを実行します。

  1. "${WORK_DIR}"から仮想マシンにファイルを安全に転送します。ファイルを安全に転送する方法については、情報セキュリティポリシーを考慮して決定する必要があります。このガイドでは便宜上、必要なすべてのファイルを仮想マシンの"${HOME}"に転送します。

  2. ルート証明書を/etc/certsにインストールします。

    $ sudo mkdir -p /etc/certs
    $ sudo cp "${HOME}"/root-cert.pem /etc/certs/root-cert.pem
    
  3. トークンを/var/run/secrets/tokensにインストールします。

    $ sudo  mkdir -p /var/run/secrets/tokens
    $ sudo cp "${HOME}"/istio-token /var/run/secrets/tokens/istio-token
    
  4. Istio仮想マシン統合ランタイムを含むパッケージをインストールします。

    $ curl -LO https://storage.googleapis.com/istio-release/releases/1.24.0/deb/istio-sidecar.deb
    $ sudo dpkg -i istio-sidecar.deb
    
  5. cluster.env/var/lib/istio/envoy/ディレクトリにインストールします。

    $ sudo cp "${HOME}"/cluster.env /var/lib/istio/envoy/cluster.env
    
  6. メッシュ構成/etc/istio/config/meshにインストールします。

    $ sudo cp "${HOME}"/mesh.yaml /etc/istio/config/mesh
    
  7. /etc/hostsにistiodホストを追加します。

    $ sudo sh -c 'cat $(eval echo ~$SUDO_USER)/hosts >> /etc/hosts'
    
  8. /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の起動

  1. Istioエージェントを起動します。

    $ sudo systemctl start istio
    

Istioの正常動作の検証

  1. /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
    
  2. Podベースのサービスをデプロイするための名前空間の作成

    $ kubectl create namespace sample
    $ kubectl label namespace sample istio-injection=enabled
    
  3. HelloWorldサービスのデプロイ

    Zip
    $ kubectl apply -n sample -f @samples/helloworld/helloworld.yaml@
    
  4. 仮想マシンからサービスへのリクエストを送信します。

    $ curl helloworld.sample.svc:5000/hello
    Hello version: v1, instance: helloworld-v1-578dd69f69-fxwwk
    

次の手順

仮想マシンに関する詳細情報

アンインストール

仮想マシンでIstioを停止します。

$ sudo systemctl stop istio

次に、Istio-sidecarパッケージを削除します。

$ sudo dpkg -r istio-sidecar
$ dpkg -s istio-sidecar

Istioをアンインストールするには、次のコマンドを実行します。

Zip
$ kubectl delete -n istio-system -f @samples/multicluster/expose-istiod.yaml@
$ istioctl uninstall -y --purge

コントロールプレーン名前空間(例: istio-system)はデフォルトでは削除されません。不要になった場合は、次のコマンドを使用して削除します。

$ kubectl delete namespace istio-system
この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございます!