Azure Kubernetes Service (AKS) でエグレス トラフィックに静的パブリック IP アドレスを使用するUse a static public IP address for egress traffic in Azure Kubernetes Service (AKS)

既定では、Azure Kubernetes Service (AKS) クラスターからのエグレス アドレスはランダムに割り当てられます。By default, the egress IP address from an Azure Kubernetes Service (AKS) cluster is randomly assigned. この構成は、外部サービスにアクセスするための IP アドレスを識別する必要がある場合には適していません。This configuration is not ideal when you need to identify an IP address for access to external services, for example. 場合によっては、サービスへのアクセスのホワイト リストに登録できる静的 IP アドレスの割り当てが必要なことがあります。Instead, you may need to assign a static IP address that can be whitelisted for service access.

この記事では、AKS クラスターでエグレス トラフィックに使用する静的パブリック IP アドレスを作成して使用する方法を示します。This article shows you how to create and use a static public IP address for use with egress traffic in an AKS cluster.

開始する前にBefore you begin

この記事は、AKS クラスターがすでに存在していることを前提としています。This article assumes that you have an existing AKS cluster. AKS クラスターが必要な場合は、Azure CLI を使用した場合または Azure portal を使用した場合の AKS のクイックスタートを参照してください。If you need an AKS cluster, see the AKS quickstart using the Azure CLI or using the Azure portal.

また、Azure CLI バージョン 2.0.59 以降がインストールされ、構成されている必要もあります。You also need the Azure CLI version 2.0.59 or later installed and configured. バージョンを確認するには、 az --version を実行します。Run az --version to find the version. インストールまたはアップグレードする必要がある場合は、「 Azure CLI のインストール」を参照してください。If you need to install or upgrade, see Install Azure CLI.

エグレス トラフィックの概要Egress traffic overview

AKS クラスターからの送信トラフィックは Azure Load Balancer の規則に従っています。Outbound traffic from an AKS cluster follows Azure Load Balancer conventions. LoadBalancer 型の最初の Kubernetes サービスが作成される前、AKS クラスターのエージェント ノードはどれも Azure Load Balancer プールのメンバーではありません。Before the first Kubernetes service of type LoadBalancer is created, the agent nodes in an AKS cluster are not part of any Azure Load Balancer pool. この構成では、どのノードもインスタンス レベルのパブリック IP アドレスが持たないことになります。In this configuration, the nodes have no instance level Public IP address. Azure では、送信フローを構成可能でも決定論的でもないパブリック ソース IP アドレスに変換します。Azure translates the outbound flow to a public source IP address that is not configurable or deterministic.

LoadBalancer 型の Kubernetes サービスが作成されると、エージェント ノードは Azure Load Balancer プールに追加されます。Once a Kubernetes service of type LoadBalancer is created, agent nodes are added to an Azure Load Balancer pool. 送信フローの場合、Azure はこれをロード バランサーで構成された最初のパブリック IP アドレスに変換します。For outbound flow, Azure translates it to the first public IP address configured on the load balancer. このパブリック IP アドレスで、そのリソースの有効期間の間のみ有効です。This public IP address is only valid for the lifespan of that resource. Kubernetes LoadBalancer サービスを削除すると、関連付けられているロード バランサーと IP アドレスも削除されます。If you delete the Kubernetes LoadBalancer service, the associated load balancer and IP address are also deleted. デプロイし直された Kubernetes サービスに対して特定の IP アドレスを割り当てるか、あるいは IP アドレスを保持する場合は、静的パブリック IP アドレスを作成して、使用することができます。If you want to assign a specific IP address or retain an IP address for redeployed Kubernetes services, you can create and use a static public IP address.

静的パブリック IP を作成するCreate a static public IP

az aks show コマンドを使用してリソース グループ名を取得し、--query nodeResourceGroup クエリ パラメーターを追加します。Get the resource group name with the az aks show command and add the --query nodeResourceGroup query parameter. 次の例では、リソース グループ名 myResourceGroup にある AKS クラスター名のノード リソース グループ myAKSCluster を取得しています。The following example gets the node resource group for the AKS cluster name myAKSCluster in the resource group name myResourceGroup:

$ az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv

MC_myResourceGroup_myAKSCluster_eastus

次に、az network public-ip create コマンドを使用して、静的パブリック IP アドレスを作成します。Now create a static public IP address with the az network public ip create command. 上記コマンドで取得したノードのリソース グループ名を指定して、その IP アドレス リソースに対して、myAKSPublicIP などの名前を指定します。Specify the node resource group name obtained in the previous command, and then a name for the IP address resource, such as myAKSPublicIP:

az network public-ip create \
    --resource-group MC_myResourceGroup_myAKSCluster_eastus \
    --name myAKSPublicIP \
    --allocation-method static

次の出力例 (一部) に見られるように IP アドレスが表示されます。The IP address is shown, as shown in the following condensed example output:

{
  "publicIp": {
    "dnsSettings": null,
    "etag": "W/\"6b6fb15c-5281-4f64-b332-8f68f46e1358\"",
    "id": "/subscriptions/<SubscriptionID>/resourceGroups/MC_myResourceGroup_myAKSCluster_eastus/providers/Microsoft.Network/publicIPAddresses/myAKSPublicIP",
    "idleTimeoutInMinutes": 4,
    "ipAddress": "40.121.183.52",
    [..]
  }

このパブリック IP アドレスは、後で az network public ip list コマンドを使用して取得することができます。You can later get the public IP address using the az network public-ip list command. 次の例に示すように、ノードのリソース グループ名を指定して、ipAddress に対するクエリを指定します。Specify the name of the node resource group, and then query for the ipAddress as shown in the following example:

$ az network public-ip list --resource-group MC_myResourceGroup_myAKSCluster_eastus --query [0].ipAddress --output tsv

40.121.183.52

静的 IP を使用してサービスを作成するCreate a service with the static IP

静的パブリック IP アドレスを使用してサービスに作成するには、YAML マニフェストに loadBalancerIP プロパティと静的パブリック IP の値を追加します。To create a service with the static public IP address, add the loadBalancerIP property and the value of the static public IP address to the YAML manifest. egress-service.yaml という名前のファイルを作成し、そこに以下の YAML をコピーします。Create a file named egress-service.yaml and copy in the following YAML. 以前の手順で作成した独自のパブリック IP アドレスを指定します。Provide your own public IP address created in the previous step.

apiVersion: v1
kind: Service
metadata:
  name: azure-egress
spec:
  loadBalancerIP: 40.121.183.52
  type: LoadBalancer
  ports:
  - port: 80

kubectl apply コマンドを使用して、サービスとデプロイを作成します。Create the service and deployment with the kubectl apply command.

kubectl apply -f egress-service.yaml

このサービスを作成すると、Azure Load Balancer に新しいフロントエンド IP が構成されます。This service configures a new frontend IP on the Azure Load Balancer. 他の IP が構成されていない場合は、すべてのエグレス トラフィックがこのアドレスを使用するようになります。If you do not have any other IPs configured, then all egress traffic should now use this address. Azure Load Balancer に複数のアドレスが構成されている場合、エグレスはそのロード バランサーの最初の IP を使用します。When multiple addresses are configured on the Azure Load Balancer, egress uses the first IP on that load balancer.

エグレス アドレスを確認するVerify egress address

静的パブリック IP アドレスが使用されていることの確認には、checkip.dyndns.org などの DNS 検索サービスを利用できます。To verify that the static public IP address is being used, you can use DNS look-up service such as checkip.dyndns.org.

基本的なDebian pod を起動してアタッチします。Start and attach to a basic Debian pod:

kubectl run -it --rm aks-ip --image=debian --generator=run-pod/v1

コンテナー内から web サイトにアクセスするには、apt-get を使用して、コンテナーに curl をインストールします。To access a web site from within the container, use apt-get to install curl into the container.

apt-get update && apt-get install curl -y

これで、Curl を使用して checkip.dyndns.orgサイトにアクセスできます。Now use curl to access the checkip.dyndns.org site. 次の出力例に示すように、エグレス IP アドレスが表示されます。The egress IP address is shown, as displayed in the following example output. この IP アドレスは、loadBalancer サービスに対して作成、定義される静的パブリック IP アドレスと同じです。This IP address matches the static public IP address created and defined for the loadBalancer service:

$ curl -s checkip.dyndns.org

<html><head><title>Current IP Check</title></head><body>Current IP Address: 40.121.183.52</body></html>

次の手順Next steps

Azure Load Balancer に複数のパブリック IP アドレスを保持しないようしたい場合は、イングレス コントローラーの使用を検討してください。To avoid maintaining multiple public IP addresses on the Azure Load Balancer, you can instead use an ingress controller. イングレス コントローラーを使用すると、負荷分散、SSL/TLS の終了、URI 書き換えサポート、アップストリーム SSL/TLS 暗号化などの利点があります。Ingress controllers provide additional benefits such as SSL/TLS termination, support for URI rewrites, and upstream SSL/TLS encryption. 詳細は、AKS での基本的なイングレス コント ローラーの作成を参照してください。For more information, see Create a basic ingress controller in AKS.