エンジニア

Alibaba CloudのKubernetes CNI、Terwayを使ってみよう

投稿日:

はじめに

こんにちは。エンジニアリング&デザインマネジメント室(EDMO) SREチームの堀江です。

昨今、クラウドサービスはますます多様化しており、AWS、GCP、Azureをはじめ、さまざまな選択肢があります。ワンダープラネットでもマルチクラウド戦略を採用しており、時代の変化に合わせて最適なクラウドサービスを選択できるようにすること、そして特定のベンダーへのロックインを軽減することを目的としています。

今回は、そんなマルチクラウド環境の中で触れる機会があったAlibaba CloudのKubernetes CNI「Terway」が非常に便利だったので、その特徴をご紹介します。

KubernetesのCNIとは

KubernetesのPodは、一般的に仮想ネットワーク上で構成されます。このネットワークの実装を担うのがCNI(Container Network Interface)であり、どのCNIを採用するかによってネットワークの挙動や特性が異なります。

大手クラウドベンダーの多くは、自社のネットワークサービスと密に統合したCNIを提供しています。例えば、AWSではVPC CNI、GCPではGKE Dataplane V2などがあります。Alibaba Cloudが提供するTerwayもその一つで、VPCやvSwitchとシームレスに統合されており、非常に使い勝手が良いと感じました。

Terwayの特徴

Terwayは、PodにENI(Elastic Network Interface)が直接割り当てられるタイプのCNIです。

最大の特徴は、PodがvSwitch(AWSでいうサブネットに相当するもの)に直接接続されているように見える点です。一般的なKubernetesのCNIでは、Pod間通信用の仮想ネットワークが構築され、Podには仮想ネットワーク上のIPアドレスが割り当てられます。しかしTerwayでは、vSwitchのCIDRから直接IPアドレスが割り当てられます。そのため、VPC内の他のリソースからPodへ直接アクセスでき、ネットワーク構成がシンプルになります。

また、NodeのENIを親として、PodのENIが子として紐付く「Trunk ENI」という構成で管理されます。これにより、1つのノードで多数のPodに対して効率的にネットワークリソースを割り当てられ、トラフィックの流れも把握しやすくなっています。

さらに、ALB Ingressとの接続においても、Serviceを介した構成であっても、実体としてはALBのターゲットに直接PodのENIが指定されます。そのため、NATを介さずに効率的な通信が実現でき、パフォーマンス面でもメリットがあります。

PodにグローバルIPアドレス(EIP)を付与する

Terwayでは、PodのENIにEIP(Elastic IP Address)を関連付けることもできます。これにより、Podに直接グローバルIPアドレスを付与することが可能になります。

今回、この機能を活用してsshdが動作するPodを作成してみました。Podにsshでログインすると、VPCのプライベートIPアドレスも同時に持っていることが確認できます。この特性を活かして、VPC PeeringやIPアドレスのホワイトリストを適切に設定すれば、踏み台サーバー(Bastion)として活用できるのではないかと考えました。

EIP付きPodを作成する手順

それでは、実際にEIPが付与されたPodを作成する手順をご紹介します。

1. ack-extend-network-controllerのインストール

まず、EIPをPodに関連付けるためのコントローラーをインストールします。Associate an EIP with a pod - Alibaba Cloud を参考に、Marketplaceから最新版をインストールしてください。

実体はHelmによるインストールになります。この際、EIPの有効化と、Kubernetesクラスターが存在するVPCのID、リージョンIDを指定します。

enableControllers:
- eip
networkController:
  region: ap-northeast-1
  vpcid: vpc-クラスタのあるVPCのID

2. IAMポリシーの割り当て

次に、ワーカーノードがEIPを操作できるように、k8s-workersロールにEIP操作権限を持つポリシーを割り当てます。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "vpc:DescribeVSwitches",
        "vpc:AllocateEipAddress",
        "vpc:AllocateEipAddressPro",
        "vpc:DescribeEipAddresses",
        "vpc:AssociateEipAddress",
        "vpc:UnassociateEipAddress",
        "vpc:ReleaseEipAddress",
        "vpc:AddCommonBandwidthPackageIp",
        "vpc:RemoveCommonBandwidthPackageIp",
        "vpc:TagResources",
        "ecs:DescribeNetworkInterfaces"
      ],
      "Resource": "*"
    }
  ]
}

3. EIPの作成

Alibaba Cloudのコンソールから、Podに割り当てるEIPを事前に作成しておきます。

4. sshdコンテナの作成とアノテーションの設定

sshdが動作するコンテナを用意し、Podにアノテーションを設定します。

なお、EIPを利用する場合はDeploymentではなくStatefulSetを使用する必要があります。これは、Podが再作成されたときに同じEIPを再度割り当てるために必要な制約です。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: bastion
spec:
  serviceName: bastion
  replicas: 1 # EIPが1つなのでレプリカ数も1にします
  template:
      annotations:
        k8s.aliyun.com/pod-eip-instanceid: "eip-作成したEIPのID"
        k8s.aliyun.com/pod-eip-release-strategy: "Never"

これだけの設定で、PodにEIPを付与することができます。

5. セキュリティグループの設定

セキュリティグループを指定したい場合は、PodNetworkingリソースを作成して設定します。

apiVersion: network.alibabacloud.com/v1beta1
kind: PodNetworking
metadata:
  name: bastion
spec:
  selector:
    podSelector:
      matchLabels:
        app: bastion
  securityGroupIDs:
    - sg-作成したセキュリティグループID
  eniOptions:
    eniType: Trunk

以上の手順で、わざわざ仮想マシンインスタンスを作成しなくても、EIPとVPCのプライベートIPアドレスの両方を持ったsshd Podが作成できました。

sshを使用するため、ポートフォワードやSOCKSプロキシとしても利用できます。ちょっとした作業や緊急時のアクセス手段など、さまざまな用途に応用できるのではないでしょうか。

まとめ

今回は、Alibaba CloudのKubernetes CNI「Terway」の特徴と、EIPをPodに付与する方法をご紹介しました。

TerwayはVPCとの統合度が高く、Podが直接vSwitchに接続されているかのように扱える点が大きな特徴です。さらにEIPを付与することで、踏み台サーバーのような用途にも活用できることがわかりました。

マルチクラウド環境で様々なクラウドサービスを触る機会がありますが、それぞれのクラウドベンダーが提供する独自の機能を理解し、活用していくことで、より効率的なインフラ構築ができると感じています。

Alibaba Cloudを使う機会がある方は、ぜひTerwayの機能を試してみてください。

採用情報

ワンダープラネットでは、一緒に働く仲間を幅広い職種で募集しております。

-エンジニア
-, ,

© WonderPlanet Inc.