Anthos Service Mesh 1.6 のドキュメントを表示しています。最新のドキュメントを表示するか、他の利用可能なバージョンを選択します。

AWS の Anthos クラスタへのインストール

このガイドでは、AWS の Anthos クラスタに Anthos Service Mesh バージョン 1.6.11-asm.1 をクリーン インストールする方法を説明します。

Anthos Service Mesh では、Istio Ingress Gateway がプリインストールされています。ただし、Ingress コントローラを使用する場合は、Anthos Service Mesh を使用して Kubernetes Ingress リソースを設定できます。このガイドでは、Anthos Service Mesh のインストール方法と、オプションで Kubernetes Ingress リソースを設定する方法について説明します。

始める前に

Anthos Service Mesh のインストールを開始する前に、次のタスクを完了していることを確認してください。

要件

  • Anthos Service Mesh をインストールするユーザー クラスタに、4 つ以上の vCPU、15 GB のメモリ、4 つのレプリカがあることを確認します。

  • ワークロードをデプロイする前に、サービスポートの命名をご覧ください。

  • クラスタ バージョンが、サポートされている環境に含まれていることを確認します。

制限事項

1 つの Google Cloud プロジェクトに関連付けることができるメッシュは 1 つのみです。

環境を設定する

Anthos Service Mesh をインストールするマシンには、次のツールが必要です。Anthos Service Mesh はユーザー クラスタにのみインストールできます。管理クラスタにはインストールできません。

  • curl コマンドライン ツール
  • Cloud SDKgcloud コマンドライン ツール)

Cloud SDK をインストールしたら、次の手順を実施します。

  1. Cloud SDK で認証します。

    gcloud auth login
    
  2. コンポーネントを更新します。

    gcloud components update
    
  3. kubectl をインストールします。

    gcloud components install kubectl
    
  4. Online Boutique のサンプル アプリケーションでインストールをデプロイしてテストする場合は、kpt をインストールします。

    gcloud components install kpt
    
  5. 次のようにしてコンテキストをユーザー クラスタに切り替えます。

    kubectl config use-context CLUSTER_NAME
  6. ユーザー アカウント(Google Cloud ログイン メールアドレス)にクラスタ管理者の権限を付与します。この権限は、Anthos Service Mesh に必要なロールベースのアクセス制御(RBAC)ルールを作成するのに必要です。

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

インストール ファイルをダウンロードする

  1. Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.11-asm.1-linux-amd64.tar.gz
  2. 署名ファイルをダウンロードし、openssl を使用して署名を検証します。

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.11-asm.1-linux-amd64.tar.gz.1.sig
    openssl dgst -verify - -signature istio-1.6.11-asm.1-linux-amd64.tar.gz.1.sig istio-1.6.11-asm.1-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    想定される出力は Verified OK です。

  3. ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。

    tar xzf istio-1.6.11-asm.1-linux-amd64.tar.gz

    このコマンドで、istio-1.6.11-asm.1 という現在の作業ディレクトリにインストール ディレクトリが作成されます。istio-1.6.11-asm.1/bin ディレクトリには、Anthos Service Mesh のインストールに使用する istioctl コマンドライン ツールが含まれています。

  4. Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。

    cd istio-1.6.11-asm.1
  5. 利便性を考えて、/bin ディレクトリを PATH に追加します。

    export PATH=$PWD/bin:$PATH

istio-system 名前空間を作成します。

コントロール プレーン コンポーネント用に istio-system という名前空間を作成します。

kubectl create namespace istio-system

検証 Webhook の構成

Anthos Service Mesh をインストールするときに、istiod にリビジョン ラベルを設定します。検証 Webhook に同じリビジョンを設定する必要があります。

次の YAML を istiod-service.yaml という名前のファイルにコピーします。

apiVersion: v1
kind: Service
metadata:
  name: istiod
  namespace: istio-system
  labels:
    istio.io/rev: asm-1611-1
    app: istiod
    istio: pilot
    release: istio
spec:
  ports:
    - port: 15010
      name: grpc-xds # plaintext
      protocol: TCP
    - port: 15012
      name: https-dns # mTLS with k8s-signed cert
      protocol: TCP
    - port: 443
      name: https-webhook # validation and injection
      targetPort: 15017
      protocol: TCP
    - port: 15014
      name: http-monitoring # prometheus stats
      protocol: TCP
  selector:
    app: istiod
    istio.io/rev: asm-1611-1

Anthos Service Mesh のインストール

このセクションでは、Anthos Service Mesh をユーザー クラスタにインストールする方法について説明します。Anthos Service Mesh をインストールすると、asm-multicloud プロファイルの [サポートされる機能] ページにリストされた、サポートされているデフォルト機能が使用できるようになります。公開サブネットまたは非公開サブネットで Ingress を有効にすることもできます。

公開

  1. 次のコマンドを実行して Anthos Service Mesh をインストールします。

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-1611-1
    

    --set revision 引数は、istio.io/rev=asm-1611-1 形式のリビジョンラベルを istiod に追加します。リビジョンラベルは、自動サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定の istiod リビジョンに関連付けます。名前空間のサイドカー自動挿入を有効にするには、istiod のラベルと一致するリビジョンのラベルを付ける必要があります。

  2. 検証 Webhook を構成して、リビジョン ラベルで istiod サービスを検出できるようにします。

    kubectl apply -f istiod-service.yaml
    

    このコマンドは、構成の適用前に検証 Webhook が構成を自動的にチェックするサービス エントリを作成します。

限定公開

次の手順に従い、Anthos Service Mesh が作成するすべてのサービスに service.beta.kubernetes.io/aws-load-balancer-internal アノテーションを追加します。このアノテーションが存在する場合、AWS の Anthos クラスタはプライベート Ingress サービスを作成します。

  1. 次の YAML を istio-operator-internal-lb.yaml というファイルに保存します。

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        ingressGateways:
        - enabled: true
          k8s:
            serviceAnnotations:
              service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
  2. 次のコマンドを実行して Anthos Service Mesh をインストールします。

    istioctl install \
     --set profile=asm-multicloud \
     --set revision=asm-1611-1 \
     -f istio-operator-internal-lb.yaml
    

    --set revision 引数は、istio.io/rev=asm-1611-1 形式のリビジョンラベルを istiod に追加します。リビジョン ラベルは、自動サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定の istiod リビジョンに関連付けます。名前空間のサイドカー自動挿入を有効にするには、istiod のラベルと一致するリビジョンのラベルを付ける必要があります。

  3. 検証 Webhook を構成して、リビジョン ラベルで istiod サービスを検出できるようにします。

    kubectl apply -f istiod-service.yaml
    

    このコマンドは、構成の適用前に検証 Webhook が構成を自動的にチェックするサービス エントリを作成します。

Prometheus と Kiali を使用しないインストール

Anthos Service Mesh 1.7 以前では、Anthos Service Mesh はデフォルトで docker.ioquay.io で元のパッケージ リポジトリから PrometheusKiali をインストールします。これらのツールをインストールしない場合、またはこれらのリポジトリへの接続を許可しない場合は、-set addonComponents.prometheus.enabled=false--set addonComponents.kiali.enabled=falseistioctl install に渡します。たとえば、パブリック サブネットのインストールから Prometheus と Kiali を除外するには、次のコマンドを使用します。

  istioctl install \
    --set profile=asm-multicloud \
    --set addonComponents.prometheus.enabled=false \
    --set addonComponents.kiali.enabled=false \
    --revision=asm-1611-1

コントロール プレーン コンポーネントを確認する

istio-system のコントロール プレーン Pod が稼働していることを確認します。

kubectl get pod -n istio-system

予想される出力は次のようになります。

NAME                                      READY   STATUS      RESTARTS   AGE
istio-ingressgateway-74cc894bfd-786rg     1/1     Running     0          7m19s
istiod-78cdbbbdb-d7tps                    1/1     Running     0          7m36s
promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s

サイドカー プロキシの挿入

Anthos Service Mesh は、サイドカー プロキシを使用してネットワークのセキュリティ、信頼性、オブザーバビリティを強化します。Anthos Service Mesh では、これらの機能がアプリケーションのプライマリ コンテナから抽出され、同じ Pod 内の個別のコンテナとして提供される共通のプロセス外プロキシに実装されます。

ワークロードをデプロイする前に、Anthos Service Mesh がトラフィックをモニタリングおよび保護できるように、サイドカー プロキシ インジェクションを構成します。

Anthos Service Mesh のインストール前にクラスタで実行されていたワークロードの場合、現在の Anthos Service Mesh バージョンを使用するように、サイドカー プロキシを挿入または更新する必要があります。新しいワークロードをデプロイする前に、Anthos Service Mesh がトラフィックをモニタリングおよび保護できるように、サイドカー プロキシ インジェクションを構成します。

サイドカーの自動挿入を有効にするには、istiod で設定したリビジョンと同じ名前を使用して、名前空間にラベルを付けます。次のコマンドを実行して、istiod のラベルを表示します。

kubectl -n istio-system get pods -l app=istiod --show-labels

リビジョン ラベル istio.io/rev=asm-1611-1 が出力に含まれていることを確認します。これは、自動挿入を有効にするために使用するラベルです。自動挿入は、次の例のように 1 つのコマンドで有効にできます。

kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-1611-1 --overwrite

ここで、NAMESPACE はアプリケーションのサービスの名前空間の名前です。名前空間を明示的に作成していない場合は default です。

詳細については、サイドカー プロキシの挿入をご覧ください。

Ingress ゲートウェイへのアクセス

Anthos Service Mesh には事前構成された Ingress ゲートウェイ istio-ingressgateway があります。これにより、サービス メッシュで実行されているアプリケーションへの受信トラフィックを管理できます。クラスタ外(ブラウザなど)からアプリケーションにアクセスできるようにするには、次のコマンドを実行します。

  • istio-ingressgateway が構成されている外部ロードバランサの外部 IP アドレスか、ホスト名とポートを取得する必要があります。

  • アプリケーションでは、Online Boutique サンプル アプリケーションの frontend-gateway.yaml と同様に、ゲートウェイと VirtualService リソースを定義する必要があります。

istio-ingressgateway の外部アドレスを取得するには:

  1. INGRESS_HOST 環境変数を作成します。

    export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    
  2. INGRESS_PORT 環境変数を作成します。

    export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
    
  3. テストするには、Online Boutique などのサンプル アプリケーションをデプロイします。

  4. ブラウザでアプリケーションにアクセスするには、URL に $INGRESS_HOST:$INGRESS_PORT の値を使用します。

トラブルシューティング

AWS の Anthos クラスタには、ロードバランサのエンドポイントを含むサブネット上にタグが必要です。AWS の Anthos クラスタは、AWSCluster リソースの spec.Networking.ServiceLoadBalancerSubnetIDs フィールドで指定されたすべてのサブネットに自動的にタグ付けします。

ユーザー クラスタにサブネットを追加する場合、または既存のサブネットにタグを再適用する必要がある場合は、次の手順に従います。

  1. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストを管理サービスに切り替えます。

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. kubectl を使用してクラスタの AWS VPC の ID を取得し、これを変数として保存します。

     export VPC_ID=$(\
     env HTTP_PROXY=http://localhost:8118 \
     kubectl get awscluster cluster-0 -o jsonpath='{.spec.networking.vpcID}')
    
  3. echo を使用して変数の内容を確認します。出力は vpc-12345678abcdef0 のようになります。

    echo $VPC_ID
    
  4. クラスタ ID を環境変数に保存します。

    export CLUSTER_ID=$(\
    env HTTP_PROXY=http://localhost:8118 \
    kubectl get awscluster cluster-0 -o jsonpath='{.status.clusterID}')
    

    この変数は echo で確認できます。

    echo $CLUSTER_ID
    

    レスポンスにクラスタ ID が含まれます。

    gke-12345678
    
  5. デフォルトでは、AWS の Anthos クラスタは、プライベート サブネットとパブリック サブネットを持つ VPC を設定します。サブネット ID を取得するには、aws コマンドライン ツールを使用します。

    次のいずれかを選択します。

    • 公開。パブリック サブネットで Service を公開する場合に使用します。
    • 非公開。プライベート サブネットで Service を公開する場合に使用します。
    • 複数のサブネット。複数のサブネットで Service を公開する場合に使用します。

    公開

     export SUBNET_ID=$(aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \
     --query "Subnets[*].SubnetId" \
     --output text)
    

    出力は、サブネット ID を含むオブジェクトです。subnet-1234abcdefg のようになります。この変数は echo で確認できます。

    echo $SUBNET_ID
    

    レスポンスに、サブネット ID が含まれます。

    subnet-012345678abcdef
    

    非公開

     export SUBNET_ID=$(aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
     --query "Subnets[*].SubnetId" \
     --output text)
    

    出力は、サブネット ID を含むオブジェクトです。subnet-1234abcdefg のようになります。この変数は echo で確認できます。

    echo $SUBNET_ID
    

    レスポンスに、サブネット ID が含まれます。

    subnet-012345678abcdef
    

    複数のサブネット

    AWSNodePool に複数のサブネットを使用している場合(たとえば、複数のアベイラビリティ ゾーンを使用している場合)、サブネット ID を個別にタグ付けする必要があります。

    aws ec2 describe-subnets を使用してサブネット ID のリストを取得します。

    すべてのパブリック サブネットのリストを取得するには、次のコマンドを実行します。

    aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \
     --query "Subnets[*].SubnetId" \
     --output text
    

    すべてのプライベート サブネットのリストを取得するには、次のコマンドを実行します。

    aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
     --query "Subnets[*].SubnetId" \
     --output text
    

    レスポンスに、サブネット ID が含まれます。

    subnet-012345678abcdef
    subnet-abcdef123456789
    subnet-123456789abcdef
    
  6. サブネットにクラスタ ID を使用してタグを付けます。複数のサブネットがある場合は、「複数のサブネット」のコマンドを実行してください。

    単一のサブネット

    aws ec2 create-tags \
    --resources $SUBNET_ID \
    --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
    

    複数のサブネット

    サブネットごとに、次のコマンドを実行します。

    aws ec2 create-tags \
    --resources subnet-ids \
    --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
    

    subnet-ids は、スペースで区切ったサブネット ID のリストに置き換えます。例: subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef

次のステップ

AWS の Anthos クラスタにサンプル デプロイを作成する