Azure Kubernetes Service での HTTP プロキシのサポート
マネージドとカスタムのどちらの仮想ネットワークにデプロイされているかにかかわらず、Azure Kubernetes Service (AKS) クラスターには、適切に機能するために必要な特定の送信依存関係があります。 以前は、HTTP プロキシ経由でインターネット アクセスをルーティングする必要がある環境において、これが問題になっていました。 ノードには、インターネット サービスにアクセスするために必要な構成、環境変数、および証明書をブートストラップする方法がありませんでした。
この機能によって AKS クラスターに HTTP プロキシのサポートが追加され、クラスター オペレーターがプロキシに依存する環境で AKS に必要なネットワーク トラフィックを保護するために使用できる、わかりやすいインターフェイスが公開されます。
AKS ノードとポッドの両方が、HTTP プロキシを使用するように構成されます。
複雑なソリューションの中には、ネットワーク全体でセキュリティで保護された通信を確立するために、信頼チェーンを作成することが必要なものがあります。 また、この機能により、クラスターのブートストラップの一環として、信頼された証明機関をノードにインストールすることもできます。
制限事項とその他の詳細
次のシナリオはサポートされて いません。
- ノード プールごとに異なるプロキシ構成
- ユーザーとパスワードの認証
- API サーバー通信用のカスタム CA
- 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 のインストールに関するページを参照してください。
Azure CLI を使用した HTTP プロキシの構成
HTTP プロキシでの AKS の使用は、クラスターの作成時に az aks create コマンドを使用して行われ、JSON ファイルとして構成が渡されます。
構成ファイルのスキーマは次のようになります。
{
"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 -n $clusterName -g $resourceGroup --http-proxy-config aks-proxy-config.json
クラスターは、ノードに構成されている HTTP プロキシを使用して初期化されます。
Azure Resource Manager (ARM) テンプレートを使用した HTTP プロキシの構成
ARM テンプレートを使用して構成された HTTP プロキシを使用して AKS クラスターをデプロイするのは簡単です。 CLI でのデプロイに使用するのと同じスキーマが、Microsoft.ContainerService/managedClusters
定義のプロパティに存在します。
"properties": {
...,
"httpProxyConfig": {
"httpProxy": "string",
"httpsProxy": "string",
"noProxy": [
"string"
],
"trustedCa": "string"
}
}
テンプレート内で、httpProxy、httpsProxy、noProxy の値を指定します。 必要に応じて、trustedCa の値を指定します。 テンプレートをデプロイします。クラスターは、ノードで構成されている HTTP プロキシを使用して初期化されます。
プロキシ構成の更新
Note
新しいプロキシに切り替える場合、更新を成功させるには、新しいプロキシが既に存在している必要があります。 その後、アップグレードが完了すると、古いプロキシを削除できます。
httpProxy、httpsProxy、trustedCa、NoProxy の値は、az aks update コマンドを使用して変更し、クラスターに適用することができます。 httpProxy、httpsProxy、NoProxy に対する aks update によって、新しい httpProxy、httpsProxy、NoProxy 値を使用してポッドに新しい環境変数が自動的に挿入されます。 環境変数の値は変更アドミッション Webhook によって作成されるポッドに挿入されるため、アプリがアプリを取得するにはポッドをローテーションする必要があります。 containerd やノード自体など、kubernetes の下のコンポーネントについては、ノード イメージのアップグレードが実行されるまで有効になりません。
たとえば、aks-proxy-config-2.json という新しい CA 証明書の base64 でエンコードされた文字列を使用して新しいファイルが作成されたと仮定すると、次の操作によってクラスターが更新されます。 または、アプリケーションの新しいエンドポイント URL を NoProxy に追加する必要があります。
az aks update -n $clusterName -g $resourceGroup --http-proxy-config aks-proxy-config-2.json
アドオン構成の監視
監視アドオンを使用する HTTP プロキシでは、次の構成がサポートされます。
- 認証なしの送信プロキシ
- ユーザー名とパスワード認証を使用した送信プロキシ
- Log Analytics エンドポイント用の信頼された証明書を使用した送信プロキシ
次の構成はサポートされていません。
- 信頼された証明書を使用したプロキシを使う場合、カスタム メトリックと推奨アラートの機能はサポートされていません
次の手順
AKS クラスターのネットワーク要件に関する詳細については、「AKS でクラスター ノードに対するエグレス トラフィックを制御する」を参照してください。