Azure Kubernetes Service (AKS) での HTTP プロキシのサポート
この記事では、送信インターネット アクセスに HTTP プロキシを使用するように Azure Kubernetes Service (AKS) クラスターを構成する方法について説明します。
マネージド仮想ネットワークまたはカスタム仮想ネットワークにデプロイされた AKS クラスターには、適切に機能するために必要な特定の送信依存関係があり、HTTP プロキシ経由でインターネット アクセスをルーティングする必要がある環境で問題が発生しました。 ノードには、インターネット サービスにアクセスするために必要な構成、環境変数、および証明書をブートストラップする方法がありませんでした。
HTTP プロキシ機能により、AKS クラスターに HTTP プロキシのサポートが追加され、プロキシに依存する環境で AKS に必要なネットワーク トラフィックをセキュリティで保護するために使用できる簡単なインターフェイスが公開されます。 この機能により、AKS ノードとポッドの両方が HTTP プロキシを使用するように構成されます。 また、この機能により、クラスターのブートストラップの一環として、信頼された証明機関をノードにインストールすることもできます。 より複雑ソリューションでは、ネットワーク全体でセキュリティで保護された通信を確立するために、信頼チェーンを作成することが必要になる場合があります。
制限と考慮事項
次のシナリオはサポートされて いません。
- ノード プールごとに異なるプロキシ構成
- ユーザーとパスワードの認証
- API サーバー通信用のカスタム証明機関 (CA)
- HTTP プロキシを使って既存の AKS クラスターを構成することはサポートされていません。HTTP プロキシ機能は、クラスターの作成時に有効にする必要があります。
- Windows ベースのクラスター
- 仮想マシン可用性セット (VMAS) を使用したノード プール
- noProxy のドメイン サフィックスにアタッチされたワイルドカードとして * を使用する
httpProxy
、httpsProxy
、trustedCa
には、既定では値がありません。 ポッドには、次の環境変数が挿入されます。
HTTP_PROXY
http_proxy
HTTPS_PROXY
https_proxy
NO_PROXY
no_proxy
プロキシ環境変数の挿入を無効にするには、"kubernetes.azure.com/no-http-proxy-vars":"true"
を使用してポッドに注釈を付ける必要があります。
開始する前に
- 最新バージョンの Azure CLI が必要です。
az --version
を実行してバージョンを見つけ、az upgrade
を実行してバージョンをアップグレードします。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 - 利用可能な AKS クラスターのアップグレードを確認して、最新バージョンの AKS が実行されていることを確認します。 アップグレードする必要がある場合は、「AKS クラスターのアップグレード」を参照してください。
- プロキシ構成の更新に必要な OS ファイルは、ノード イメージのアップグレード プロセス中にのみ更新できます。 プロキシを構成した後、ノード イメージをアップグレードして変更を適用する必要があります。 詳細については、AKS ノード イメージのアップグレードに関する記事を参照してください。
Azure CLI を使用した HTTP プロキシの構成
az aks create
コマンドを使用し、構成を JSON ファイルとして渡すことで、クラスターの作成時に HTTP プロキシを使用して AKS クラスターを構成できます。
構成ファイルのスキーマは次のようになります。
{
"httpProxy": "string",
"httpsProxy": "string",
"noProxy": [
"string"
],
"trustedCa": "string"
}
httpProxy
: クラスターの外部で HTTP 接続を作成するために使用するプロキシ URL。 URL スキームはhttp
である必要があります。httpsProxy
: クラスターの外部で HTTPS 接続を作成するために使用するプロキシ URL。 指定しない場合、httpProxy
が HTTP と HTTPS の両方の接続に使用されます。noProxy
: プロキシを除外する宛先ドメイン名、ドメイン、IP アドレス、または他のネットワーク CIDR の一覧。trustedCa
:base64 encoded
代替 CA 証明書の内容を含む文字列。 現在は、PEM
形式のみがサポートされています。
重要
Kubernetes システムの一部である Go ベースのコンポーネントとの互換性のために、証明書では、非推奨の共通名証明書ではなく、Subject Alternative Names(SANs)
がサポートされている必要があります。
環境変数 http_proxy
、https_proxy
、no_proxy
に準拠する方法は、アプリケーションによって異なります。 Curl と Python では no_proxy
で CIDR がサポートされていませんが、Ruby ではサポートされています。
入力例:
Note
CA 証明書は、PEM 形式の証明書コンテンツの base64 でエンコードされた文字列である必要があります。
{
"httpProxy": "http://myproxy.server.com:8080/",
"httpsProxy": "https://myproxy.server.com:8080/",
"noProxy": [
"localhost",
"127.0.0.1"
],
"trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...b3Rpbk15RGszaWFyCkYxMFlscWNPbWVYMXVGbUtiZGkvWG9yR2xrQ29NRjNURHg4cm1wOURCaUIvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0="
}
ファイルを作成し、httpProxy
、httpsProxy
、noProxy
の値を指定します。 ご自分の環境で必要な場合は、trustedCa
の値を指定します。 次に、--http-proxy-config
パラメーターを作成したファイルに設定して、az aks create
コマンドを使用してクラスターをデプロイできます。 クラスターは、ノードに構成されている HTTP プロキシを使用して初期化する必要があります。
az aks create \
--name $clusterName \
--resource-group $resourceGroup \
--http-proxy-config aks-proxy-config.json \
--generate-ssh-keys
Azure Resource Manager (ARM) テンプレートを使用した HTTP プロキシの構成
ARM テンプレートを使用して、HTTP プロキシを備えた AKS クラスターをデプロイできます。 次の例に示すように、CLI デプロイに使用されるのと同じスキーマが、"properties"
の Microsoft.ContainerService/managedClusters
定義に存在します。
"properties": {
...,
"httpProxyConfig": {
"httpProxy": "string",
"httpsProxy": "string",
"noProxy": [
"string"
],
"trustedCa": "string"
}
}
テンプレートで、httpProxy
、httpsProxy
、noProxy
の値を指定します。 必要に応じて、trustedCa
の値を指定します。 次に、テンプレートをデプロイできます。 クラスターは、ノードに構成されている HTTP プロキシを使用して初期化する必要があります。
外部サービス用の Istio アドオン HTTP プロキシ
AKS 用の Istio ベースのサービス メッシュ アドオンを使用している場合、メッシュ内のアプリケーションが HTTP プロキシ経由で非クラスターまたは外部リソースにアクセスできるようにするためにサービス エントリを作成する必要があります。 次に例を示します。
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: proxy
spec:
hosts:
- my-company-proxy.com # ignored
addresses:
- $PROXY_IP/32
ports:
- number: $PROXY_PORT
name: tcp
protocol: TCP
location: MESH_EXTERNAL
ファイルを作成し、PROXY_IP
と PROXY_PORT
の値を指定します。 次を使用してサービス エントリをデプロイできます。
kubectl apply -f service_proxy.yaml
プロキシ構成の更新
Note
新しいプロキシに切り替える場合、更新を成功させるには、新しいプロキシが既に存在している必要があります。 アップグレードが完了すると、古いプロキシを削除できます。
必要に応じて、httpProxy
、httpsProxy
、noProxy
、trustedCa
の値が更新された新しい JSON ファイルに --http-proxy-config
パラメーターを設定した az aks update
コマンドを使用して、クラスター上のプロキシ構成を更新できます。 更新プログラムは、新しい httpProxy
、httpsProxy
、または noProxy
値を持つポッドに新しい環境変数を挿入します。 環境変数の値は変更アドミッション Webhook によって挿入されるため、アプリがそれを取得するには、ポッドをローテーションする必要があります。 containerd やノード自体など、Kubernetes の下のコンポーネントについては、ノード イメージのアップグレードが実行されるまで有効になりません。
たとえば、aks-proxy-config-2.json という名前の新しい CA 証明書の base64 でエンコードされた文字列を含む新しいファイルを作成したとします。 次のコマンドを使用して、クラスターのプロキシ構成を更新できます。
az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json
AKS ノード イメージをアップグレードする
プロキシを構成した後、ノード イメージをアップグレードして変更を適用する必要があります。 ノード イメージのアップグレード プロセスは、プロキシ構成の更新に必要な OS ファイルを更新する唯一の方法です。 ノード イメージのアップグレード プロセスは、ノード プール内の各ノードの OS イメージを更新するローリング アップグレードです。 AKS コントロール プレーンは、実行中のアプリケーションに中断しないアップグレード プロセスを処理します。
AKS ノード イメージをアップグレードするには、「Azure Kubernetes Service (AKS) ノード イメージのアップグレード」に関するページを参照してください。
アドオン構成の監視
監視アドオンを使用する HTTP プロキシでは、次の構成がサポートされます。
- 認証なしの送信プロキシ
- ユーザー名とパスワードの認証を使用した送信プロキシ
- Log Analytics エンドポイント用の信頼された証明書を使用した送信プロキシ
次の構成はサポートされていません。
- 信頼された証明書でプロキシを使用する場合のカスタム メトリックと推奨アラート機能
次のステップ
AKS クラスターのネットワーク要件に関する詳細については、「AKS でクラスター ノードに対するエグレス トラフィックを制御する」を参照してください。
Azure Kubernetes Service