すべてのプロダクト
Search
ドキュメントセンター

:Terwayのデプロイと設定

最終更新日:Nov 17, 2024

ハイブリッドクラスターで使用されるコンテナネットワークプラグインは、データセンターで実行されるネットワークプラグインと、クラウドコンピューティングノードで実行されるネットワークプラグインの2つの部分で構成されます。 このトピックでは、ハイブリッドクラスターにTerwayをデプロイおよび設定する方法について説明します。

前提条件

シナリオ1: データセンターがコンテナーネットワークにオーバーレイネットワークを使用

このシナリオでは、データセンターはコンテナーネットワークにオーバーレイネットワークを使用します。 クラウド計算ノードもこのネットワークモードを使用できます。 クラウドコンピュートノードがコンテナーネットワークプラグインのDaemonSetで使用されるコンテナーイメージを取得できることを確認するだけで済みます。

以下のオーバーレイネットワークモードが一般的に使用されます。

  • フランネルVXLAN

  • キャリコIPIP

  • 繊毛VXLAN

シナリオ2: データセンターがコンテナーネットワークにBGPネットワークを使用

このシナリオでは、データセンターはコンテナーネットワークにBorder Gateway Protocol (BGP) ネットワークを使用します。 クラウド計算ノードでTerwayネットワークプラグインを使用する必要があります。 オンプレミスネットワークとクラウドを接続する方法の詳細については、「BGPの設定と管理」をご参照ください。

このシナリオでは、次の条件が満たされていることを確認します。

  • CalicoのBGPルートリフレクターなど、オンプレミスのコンテナネットワークプラグインのDaemonSetは、クラウド計算ノードにスケジュールされていません。

  • TerwayネットワークプラグインのDaemonSetは、オンプレミスのコンピュートノードにスケジュールされていません。

登録済みクラスターのノードプールから追加された各計算ノードには、alibabacloud.com/external=trueラベルがあります。 このラベルを使用して、クラウド計算ノードとオンプレミス計算ノードを区別できます。

たとえば、ノードアフィニティを設定して、オンプレミスのCalicoネットワークプラグインのDaemonSetがalibabacloud.com/external=trueラベルを持つノードにスケジュールされないようにすることができます。 同じ方法を使用して、他のオンプレミスのワークロードがクラウド計算ノードにスケジュールされないようにすることができます。 次のコマンドを実行して、Calicoネットワークプラグインを更新します。

cat <<EOF > calico-ds.pactch
spec:
  template:
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: alibabacloud.com/external
                operator: NotIn
                values:
                - "true"
EOF
kubectl -n kube-system patch ds calico-node -p "$(cat calico-ds.pactch)"

デフォルトでは、TerwayのDaemonSetはalibabacloud.com/external=trueラベルを持つノードにスケジュールされます。

シナリオ3: データセンターはコンテナーネットワークにホストネットワークを使用します

このシナリオでは、データセンターはコンテナーネットワークにホストネットワークを使用します。 TerwayネットワークプラグインのDaemonSetがオンプレミスのコンピュートノードにスケジュールされていないことを確認するだけです。 デフォルトでは、TerwayネットワークプラグインのDaemonSetは、alibabacloud.com/external=trueラベルを持つノードにのみスケジュールされます。

Terwayネットワークプラグインのインストールと設定

シナリオ2およびシナリオ3では、ハイブリッドクラスターのクラウド計算ノードにTerwayネットワークプラグインをインストールして設定する必要があります。

手順1: Terwayネットワークプラグインに権限を付与する

RAMコンソールの使用

  1. RAMユーザーを作成し、次のポリシーをRAMユーザーにアタッチします。 詳細については、「RAMを使用したクラスターとクラウドリソースへのアクセス許可」をご参照ください。

    サンプルコードの表示

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "ecs:CreateNetworkInterface",
                    "ecs:DescribeNetworkInterfaces",
                    "ecs:AttachNetworkInterface",
                    "ecs:DetachNetworkInterface",
                    "ecs:DeleteNetworkInterface",
                    "ecs:DescribeInstanceAttribute",
                    "ecs:AssignPrivateIpAddresses",
                    "ecs:UnassignPrivateIpAddresses",
                    "ecs:DescribeInstances",
                    "ecs:ModifyNetworkInterfaceAttribute"
                ],
                "Resource": [
                    "*"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "vpc:DescribeVSwitches"
                ],
                "Resource": [
                    "*"
                ],
                "Effect": "Allow"
            }
        ]
    }
  2. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  3. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[設定] > [秘密] を選択します。

  4. [シークレット] ページで、[YAMLから作成] をクリックします。 次のサンプルコードを入力して、alibaba-addon-Secretという名前のシークレットを作成します。

    説明

    コンポーネントは、保存されたAccessKeyIDとAccessKeySecretを使用してクラウドサービスにアクセスします。 alibaba-addon-secretが既に存在する場合は、この手順をスキップします。

    apiVersion: v1
    kind: Secret
    metadata:
      name: alibaba-addon-secret
      namespace: kube-system
    type: Opaque
    stringData:
      access-key-id: <AccessKeyID of the RAM user>
      access-key-secret: <AccessKeySecret of the RAM user>

onectlの使用

  1. オンプレミスマシンにonectlをインストールします。 詳細については、「onectlを使用した登録済みクラスターの管理」をご参照ください。

  2. 次のコマンドを実行して、TerwayにResource Access Management (RAM) 権限を付与します。

    onectl ram-user grant --addon terway-eniip

    期待される出力:

    Ram policy ack-one-registered-cluster-policy-terway-eniip granted to ram user ack-one-user-ce313528c3 successfully.

ステップ2: Terwayプラグインのインストール

ACKコンソールの使用

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  3. [アドオン] ページで、[ネットワーク] タブをクリックします。 terway-eniipコンポーネントを選択し、[インストール] をクリックします。

    説明

    NetworkPolicyはデフォルトで無効になっています。 このポリシーを有効にするには、インストールページで [Enables NetworkPolicy] を選択し、追加設定を完了します。 詳細については、「TerwayのNetworkPolicy機能の有効化 (オプション) 」をご参照ください。

onectlの使用

次のコマンドを実行して、Terwayプラグインをインストールします。

onectl addon install terway-eniip

期待される出力:

Addon terway-eniip, version **** installed.

手順3: Terwayプラグインの設定

次のコマンドを実行してeni-config ConfigMapを変更し、eni_conf.access_keyおよびeni_conf.access_secretパラメーターを設定します。

kubectl -n kube-system edit cm eni-config

次のサンプルコードは、eni-config ConfigMapの例を示しています。

kind: ConfigMap
apiVersion: v1
metadata:  
 name: eni-config  
 namespace: kube-system
data:  
 eni_conf: |    
  {      
   "version": "1",      
   "max_pool_size": 5,      
   "min_pool_size": 0,      
   "vswitches": {"AZoneID":["VswitchId"]},      
   "eni_tags": {"ack.aliyun.com":"{{.ClusterId}}"},      
   "service_cidr": "{{.ServiceCIDR}}",      
   "security_group": "{{.SecurityGroupId}}",      
   "access_key": "",      
   "access_secret": "",      
   "vswitch_selection_policy": "ordered"    
  }  
 10-terway.conf: |    
  {      
   "cniVersion": "0.3.0",      
   "name": "terway",      
   "type": "terway"    
  }

kubeconfigファイルを使用して登録済みクラスターに接続し、Terwayネットワークプラグイン用に作成されたDaemonSetを照会できます。 クラウドコンピュートノードがハイブリッドクラスターに追加される前に、DaemonSetはオンプレミスコンピュートノードにスケジュールされません。

次のコマンドを実行して、Terwayネットワークを照会します。

kubectl -nkube-system get ds |grep terway

期待される出力:

terway-eniip   0         0         0       0            0           alibabacloud.com/external=true      16s

TerwayのNetworkPolicy機能の有効化 (オプション)

デフォルトでは、登録済みクラスターでTerwayのNetworkPolicy機能は無効になっています。 詳細については、「ACKクラスターでのネットワークポリシーの使用」をご参照ください。

  • NetworkPolicyを有効にする必要がない場合は、この手順をスキップしてください。

  • NetworkPolicyを有効にした場合、ビジネス要件に基づいてCustomResourceDefinitions (CRD) をインストールするかどうかを決定する必要があります。 次のYAMLテンプレートでは、CRDの例を示します。

    重要

    TerwayのNetworkPolicy機能は、Calicoに関連するCRDに依存しています。 Calicoを使用するクラスターでTerwayのNetworkPolicy機能を有効にすると、既存のCalicoネットワークでエラーが発生する可能性があります。 質問があれば、

    チケットを起票してサポートセンターにお問い合わせくださいしてサポートセンターにお問い合わせください。

    必要なCRDを展開するためのYAMLテンプレートを表示します

    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: felixconfigurations.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: FelixConfiguration
        plural: felixconfigurations
        singular: felixconfiguration
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: bgpconfigurations.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: BGPConfiguration
        plural: bgpconfigurations
        singular: bgpconfiguration
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: ippools.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: IPPool
        plural: ippools
        singular: ippool
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: hostendpoints.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: HostEndpoint
        plural: hostendpoints
        singular: hostendpoint
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: clusterinformations.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: ClusterInformation
        plural: clusterinformations
        singular: clusterinformation
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: globalnetworkpolicies.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: GlobalNetworkPolicy
        plural: globalnetworkpolicies
        singular: globalnetworkpolicy
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: globalnetworksets.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: GlobalNetworkSet
        plural: globalnetworksets
        singular: globalnetworkset
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: networkpolicies.crd.projectcalico.org
    spec:
      scope: Namespaced
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: NetworkPolicy
        plural: networkpolicies
        singular: networkpolicy