このページでは、Google Distributed Cloud のプロキシとファイアウォール ルールを設定する方法について説明します。
プロキシ サーバーを構成する
ブートストラップに使用するマシンとクラスタノードがプロキシ サーバー経由でインターネットにアクセスしている場合は、次の操作を行う必要があります。
- クラスタノードでパッケージ マネージャー用のプロキシを構成する
- クラスタ構成ファイルにプロキシの詳細を構成する。
前提条件
プロキシ サーバーで、次のアドレスへの接続を許可する必要があります。
| アドレス | 目的 | 
|---|---|
| *.gcr.io | Artifact Registry からイメージを pull します。 | 
| accounts.google.com | OpenID の認可リクエストを処理し、トークン検証用の公開鍵を検出します。 | 
| binaryauthorization.googleapis.com | Binary Authorization を使用する場合に必要。コンテナ イメージを実行するクラスタからのリクエストを認可(または拒否)します。 | 
| cloudresourcemanager.googleapis.com | クラスタが接続されている Google Cloud プロジェクトに関するメタデータを解決します。 | 
| compute.googleapis.com | Cloud Logging と Cloud Monitoring のリソースのリージョンを確認します。 | 
| connectgateway.googleapis.com | 問題を診断するために、クラスタへの読み取り専用アクセス権を Cloud カスタマーケアに付与する機能を有効にします。 | 
| dl.google.com | Google Cloud SDK をダウンロードしてインストールします。 | 
| gkeconnect.googleapis.com | Google Cloud からのリクエストの受信に使用するチャネルを確立し、レスポンスを発行します。クラスタが Google Cloud リージョンを使用してフリートに登録された場合は、許可リストに REGION-gkeconnect.googleapis.comを登録する必要があります(例:us-central1-gkeconnect.googleapis.com)。リージョンを指定しなかった場合、クラスタはグローバル Connect サービス インスタンスを使用し、許可リストにgkeconnect.googleapis.comを登録します。クラスタのフリート メンバーシップの場所を探す必要がある場合は、gcloud container fleet memberships listを実行します。詳細については、gkeConnect.locationをご覧ください。 | 
| gkehub.googleapis.com | Google Cloudに接続するクラスタに対応する Google Cloud側のフリート メンバーシップ リソースを作成します。 | 
| gkeonprem.googleapis.com | ベアメタルと VMware インフラストラクチャでクラスタのライフサイクルを作成、管理します。 | 
| gkeonprem.mtls.googleapis.com | ベアメタルと VMware インフラストラクチャでクラスタのライフサイクルを作成、管理します。このバージョンの API は、mTLS で自動的に使用されます。 | 
| iam.googleapis.com | Google Cloud への認証と API 呼び出しに使用できるサービス アカウントを作成します。 | 
| iamcredentials.googleapis.com | 監査ロギングのアドミッション コントロールとテレメトリー レポートを提供します。 | 
| kubernetesmetadata.googleapis.com | クラスタは、この API をエンドポイントとして使用して Kubernetes メタデータをGoogle Cloudに送信します。このメタデータは、クラスタのモニタリング、デバッグ、復元に不可欠です。 | 
| logging.googleapis.com | ログエントリを書き込み、Cloud Logging 構成を管理します。 | 
| monitoring.googleapis.com | Cloud Monitoring のデータと構成を管理します。 | 
| oauth2.googleapis.com | OAuth トークン交換によってアカウントへのアクセスを認証します。 | 
| opsconfigmonitoring.googleapis.com | Pod、Deployment、Node などの Kubernetes リソースのメタデータを収集して、指標クエリを拡充します。 | 
| releases.hashicorp.com | 省略可。管理ワークステーションの Terraform クライアントを使用して、 terraform applyなどのコマンドを実行します。 | 
| securetoken.googleapis.com | Workload Identity 認可の更新トークンを取得します。 | 
| servicecontrol.googleapis.com | 監査ログエントリを Cloud Audit Logs に書き込みます。 | 
| serviceusage.googleapis.com | サービスと API を有効にして検証します。 | 
| stackdriver.googleapis.com | Google Cloud Observability メタデータ(Stackdriver アカウントなど)を管理します。 | 
| storage.googleapis.com | Artifact Registry オブジェクトなどのオブジェクト ストレージとバケットを管理します。 | 
| sts.googleapis.com | Google やサードパーティの認証情報を、 Google Cloud リソースへの有効期間が短いアクセス トークンと交換できます。 | 
| www.googleapis.com | 受信した Google Cloud サービス リクエストからサービス トークンを認証します。 | 
これらの URL に加えて、プロキシ サーバーは、オペレーティング システムのパッケージ マネージャーが必要とするパッケージのミラーリングも許可する必要があります。パッケージ マネージャーの構成を更新すると、より確定的なリストを使用でき、管理が容易になります。
クラスタノードでパッケージ マネージャー用のプロキシを構成する
Google Distributed Cloud は、Ubuntu では APT パッケージ管理システムを使用し、Red Hat Enterprise Linux では DNF パッケージ管理システムを使用します。OS Package Manager のプロキシ構成が正しいことを確認してください。
プロキシ構成の詳細については、OS ディストリビューションのドキュメントをご覧ください。次の例は、プロキシを構成する 1 つの方法を示しています。
APT
以下のコマンドは、APT のプロキシを構成する方法を示しています。
sudo touch /etc/apt/apt.conf.d/proxy.conf
echo 'Acquire::http::Proxy "http://USERNAME:PASSWORD@DOMAIN";' \
    >> /etc/apt/apt.conf.d/proxy.conf
echo 'Acquire::https::Proxy "http://USERNAME:PASSWORD@DOMAIN";' \
    >> /etc/apt/apt.conf.d/proxy.conf
USERNAME:PASSWORD@DOMAIN は、構成に固有の詳細に置き換えます。たとえば、プロキシでログインが不要な場合は、DOMAIN で USERNAME:PASSWORD@ を含めないでください。
DNF
このコマンドは、DNF のプロキシを構成する方法を示しています。
echo "proxy=http://USERNAME:PASSWORD@DOMAIN" >> /etc/dnf/dnf.conf
USERNAME:PASSWORD@DOMAIN は、構成に固有の詳細に置き換えます。たとえば、プロキシでログインが不要な場合は、DOMAIN で USERNAME:PASSWORD@ を含めないでください。
クラスタ構成ファイルにプロキシの詳細を構成する
クラスタの構成ファイルで次の値を設定して、プロキシを使用するようにクラスタを構成します。
proxy.url
プロキシ URL を指定する文字列。ブートストラップとノードマシンは、このプロキシを使用してインターネットにアクセスします。プロキシの URL 文字列は、そのスキーマで始まる必要があります(例: http://、https://)。
proxy.noProxy
プロキシ サーバーを経由しない IP アドレス、ホスト名、ドメイン名のリスト。
ほとんどの場合、このリストに項目を追加する必要はありません。
noProxy のユースケース:
- 同じプライベート ネットワークにあるプライベート パッケージ ミラーの使用(アクセスにプロキシを必要としない) 
- 同じプライベート ネットワークにあるプライベート レジストリ ミラーの使用(アクセスにプロキシを必要としない) 
例
次に、クラスタ構成ファイルのプロキシ設定の例を示します。
  proxy:
     url: http://USERNAME:PASSWORD@DOMAIN
     noProxy:
     - example1.com
     - example2.com
GKE Identity Service のプロキシ構成
Google Distributed Cloud クラスタで認証に GKE Identity Service を使用する場合は、プロキシの背後で GKE Identity Service が機能するように、次の追加手順が必要です。
- クラスタ構成ファイルで、GKE Identity Service の設定の OIDC - authenticationセクションにプロキシの詳細を設定します。- authentication: oidc: proxy: http://USERNAME:PASSWORD@DOMAIN
- OIDC プロバイダの認証 URL への接続を許可するように、プロキシ サーバーの構成を更新します。 
クラスタ内でプロキシがどのように使用されるか
目安としては、bmctl コマンドとその生成プロセスでは、環境変数 HTTPS_PROXY と NO_PROXY(定義されている場合)のプロキシ構成が使用されます。それ以外の場合、bmctl はクラスタ構成ファイルのプロキシ構成を使用します。管理ワークステーション、クラスタノード マシン、ブートストラップ クラスタで実行されるその他のコマンドでは、クラスタ構成ファイルのプロキシ構成が使用されます。
各ノードの OS パッケージ マネージャーは、プロキシ設定の独自の構成ファイルを使用します。
ブートストラップ マシンでプロキシ構成をオーバーライドする
クラスタ構成ファイルのプロキシ設定をオーバーライドすることで、ノードマシンで使用されているプロキシとは異なるプロキシの背後で管理ワークステーションを実行できます。プロキシ設定をオーバーライドするには、ブートストラップ マシンで次の環境変数を設定します。
export HTTPS_PROXY=http://USERNAME:PASSWORD@DOMAIN
USERNAME:PASSWORD@DOMAIN は、構成に固有の詳細に置き換えます。
export NO_PROXY=example1.com,example2.com
example1.com,example2.com は、プロキシ サーバーを経由しない IP アドレス、ホスト名、ドメイン名に置き換えます。
副作用
root として実行すると、bmctl はブートストラップ マシンの Docker プロキシ構成を更新します。bmctl を root として実行しない場合は、Docker プロキシを手動で構成します。
ファイアウォール ルール
以降のセクションで説明するファイアウォール ルールを設定して、Google Distributed Cloud に必要なトラフィックを許可します。
Google Distributed Cloud の前提条件となるポート要件については、ポートの使用状況をご覧ください。
クラスタノードの IP アドレスのファイアウォール ルール
次の表に、クラスタで使用できる IP アドレスのファイアウォール ルールを示します。
| 送信元 | 送信元ポート | 送信先 | ポート | プロトコル | 説明 | 
|---|---|---|---|---|---|
| クラスタノード | 1024~65535 | cloudresourcemanager.googleapis.comgkeconnect.googleapis.comgkehub.googleapis.com | 443 | TCP / HTTPS | フリート登録にはアクセス権が必要です。 | 
| Cloud Logging Collector。クラスタノードで実行されます。 | 1024~65535 | oauth2.googleapis.comlogging.googleapis.comstackdriver.googleapis.comservicecontrol.googleapis.comstorage.googleapis.comwww.googleapis.com | 443 | TCP / HTTPS | |
| Cloud Metadata Collector。クラスタノードで実行されます。 | 1024~65535 | opsconfigmonitoring.googleapis.com | 443 | TCP / HTTPS | |
| Cloud Monitoring Collector。クラスタノードで実行されます。 | 1024~65535 | oauth2.googleapis.commonitoring.googleapis.comstackdriver.googleapis.comservicecontrol.googleapis.com | 443 | TCP / HTTPS | |
| クラスタノード | 1024~65535 | オンプレミスのローカル Docker レジストリ | レジストリにより異なる | TCP / HTTPS | Google Distributed Cloud が gcr.ioではなく、ローカルの非公開 Docker レジストリを使用するように構成されている場合は必須です。 | 
| クラスタノード | 1024~65535 | gcr.iooauth2.googleapis.comstorage.googleapis.com管理クラスタで有効になっているサービスに必要な *.googleapis.com形式の Google API URL。 | 443 | TCP / HTTPS | 公開 Docker レジストリからイメージをダウンロードします。非公開 Docker レジストリを使用する場合は不要です。 | 
| Connect Agent。クラスタノードで実行されます。 | 1024~65535 | cloudresourcemanager.googleapis.comgkeconnect.googleapis.comgkehub.googleapis.comwww.googleapis.comiam.googleapis.comiamcredentials.googleapis.comoauth2.googleapis.comsecuretoken.googleapis.comsts.googleapis.comaccounts.google.com | 443 | TCP / HTTPS | Connect Agent が管理するトラフィックの詳細については、Connect Agent の概要をご覧ください。 | 
| クラスタノード | 1024~65535 | gkeonprem.googleapis.comgkeonprem.mtls.googleapis.com | 443 | TCP / HTTPS | ベアメタルと VMware インフラストラクチャでクラスタのライフサイクルを作成、管理します。 | 
残りのコンポーネントのファイアウォール ルール
次の表のルールは、前のセクションで記載されていない他のコンポーネントすべてに適用されます。
| 送信元 | 送信元ポート | 送信先 | ポート | プロトコル | 説明 | 
|---|---|---|---|---|---|
| クライアントとアプリケーション エンドユーザー | すべて | Istio Ingress の VIP | 80、443 | TCP | ユーザー クラスタの Ingress サービスへのエンドユーザー トラフィック。 | 
| 管理ワークステーション | 32768~60999 | gcr.iocloudresourcemanager.googleapis.comoauth2.googleapis.comstorage.googleapis.comこのクラスタで有効になっているサービスに必要な任意の *.googleapis.comURL。 | 443 | TCP / HTTPS | 公開 Docker レジストリから Docker イメージをダウンロードします。 | 
| 管理ワークステーション | 32768~60999 | gcr.iocloudresourcemanager.googleapis.comiam.googleapis.comoauth2.googleapis.comserviceusage.googleapis.comstorage.googleapis.com管理クラスタやユーザー クラスタで有効なサービスに必要な任意の *.googleapis.comURL。 | 443 | TCP / HTTPS | プリフライト チェック(検証)。 |