このページでは、VMware 用 Google Distributed Cloud(ソフトウェアのみ)用に既存の Container Registry サーバーを構成する方法について説明します。
このページは、技術インフラストラクチャの設定、モニタリング、管理を行う管理者、アーキテクト、オペレーターを対象としています。 Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE ユーザーのロールとタスクをご覧ください。
概要
デフォルトでは、クラスタの作成またはアップグレード時に、Google Distributed Cloud はコンポーネント アクセス サービス アカウントを使用して gcr.io/gke-on-prem-release
からシステム イメージを pull します。必要に応じて、独自の Container Registry サーバーを指定し、システム イメージが非公開レジストリ サーバーから pull されるようにすることもできます。
Google Distributed Cloud は、保護されていない Container Registry をサポートしていません。Container Registry サーバーを起動する際、証明書と鍵を提供する必要があります。証明書は、パブリック認証局(CA)によって署名されることも、自己署名されることもあります。
Container Registry サーバーを作成する
Container Registry サーバーの作成方法については、Docker ドキュメントの外部からアクセス可能なレジストリを実行するをご覧ください。
レジストリを構成する
非公開の Container Registry を使用するには、gkectl
コマンドライン ツールまたは Terraform を使用します。
gkectl
クラスタを作成する前に、
privateRegistry
セクションを管理クラスタ構成ファイルに追加します。このセクションに入力した場合、次の処理が行われます。
クラスタの作成またはアップグレード前に
gkectl prepare
コマンドを実行すると、管理クラスタ構成ファイルのbundlePath
フィールドで指定された tar ファイルからイメージが抽出され、イメージが非公開レジストリ サーバーに push されます。クラスタの作成またはアップグレード時に、システム イメージが非公開レジストリ サーバーから pull されます。
ネットワークがプロキシ サーバーの背後にある場合は、
proxy
セクションに入力します。
Terraform
管理クラスタを作成するの [Terraform] タブの手順に沿って、管理クラスタ構成ファイルに入力します。
管理クラスタの構成ファイルに以下を追加します。
private_registry_config { address = "ADDRESS" ca_cert = "CA_CERT" }
次のように置き換えます。
ADDRESS
: 非公開レジストリを実行するマシンの IP アドレスまたは FQDN(完全修飾ドメイン名)。CA_CERT
: 非公開レジストリの CA 証明書の公開鍵。
ネットワークがプロキシ サーバー経由である場合は、次を追加します。
proxy { url: "PROXY_SERVER_ADDRESS" no_proxy: "BYPASS_LIST" }
次のように置き換えます。
PROXY_SERVER_ADDRESS
: プロキシ サーバーの HTTP アドレス。スキームのデフォルト ポートと同じ場合でも、ポート番号を含めます。BYPASS_LIST
: プロキシ サーバーを経由しない IP アドレス、IP アドレス範囲、ホスト名、ドメイン名のカンマ区切りのリスト。
例:
url: "http://my-proxy.example.local:80" no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"
Google Distributed Cloud がこれらのアドレス、ホスト、ドメインのいずれかにリクエストを送信する場合、そのリクエストはプロキシ サーバーをバイパスして宛先に直接送信されます。
管理クラスタを作成するの [Terraform] タブの手順に沿って、Terraform 構成ファイルとプランを検証し、ブートストラップ クラスタを作成します。
gkectl register bootstrap
コマンドを実行すると、gkectl
から非公開レジストリのユーザー名とパスワードを入力するよう求められます。
クラスタの作成時に、システム イメージが非公開レジストリ サーバーから pull されます。
高度なクラスタとフルバンドルの制限事項
Google Distributed Cloud には、フルバンドルと標準バンドルの 2 つのバンドルがあります。管理ワークステーションのバンドルがどちらであるかを確認するには、管理クラスタ構成ファイルの bundlePath
フィールドをチェックします。ファイル名の末尾が -full
である場合、管理ワークステーションのバンドルはフルバンドルです。ファイル名の末尾が -full
でない場合、管理ワークステーションのバンドルは標準バンドルです。
gkeadm
コマンドを使用して管理ワークステーションを作成した場合、フルバンドルがインストールされた管理ワークステーション VM が作成され、管理クラスタ構成ファイルの bundlePath
フィールドが構成されます。
高度なクラスタが有効になっている場合、非公開レジストリでフルバンドルを使用する際には、次のような制限があります。
バージョン 1.31: 非公開レジストリでフルバンドルはサポートされていません。高度なクラスタで非公開レジストリを使用するには、以下の手順に沿って操作します。
- 標準サイズのバンドルを管理ワークステーションにダウンロードします。
- 管理クラスタ構成ファイルの
bundlePath
フィールドでファイル名を更新します。
バージョン 1.32: フルバンドルの使用はサポートされていますが、
gkectl prepare
コマンドは tar ファイルではなくgcr.io/gke-on-prem-release
からイメージを pull します。ただし、このコマンドによってイメージが非公開レジストリに push されます。これにより、クラスタの作成またはアップグレード時にシステム イメージが非公開レジストリから pull されます。
通常のクラスタと高度なクラスタの違い
高度なクラスタには、標準クラスタと比較していくつかの重要な違いがあります。
- 非公開レジストリを使用する場合、イメージは非公開レジストリのホスト名ではなく、
gcr.io
から pull されるように見えます。これは、実際には非公開レジストリ サーバーからイメージが pull されている場合でも、想定される動作です。 - イメージの pull では、クラスタ内の
private-registry-creds
シークレットの認証情報ではなく、非公開レジストリに接続する各マシンの/etc/containerd/config.toml
ファイルの認証情報が使用されます。 - すべての
gcr.io
イメージについて、クラスタはまず限定公開レジストリからの pull を試みます。イメージが非公開レジストリにない場合、システムはインターネット経由でgcr.io
からイメージを pull します。このフォールバックを停止するには、noProxy
を設定するか、ファイアウォール ルールを使用してgcr.io
トラフィックをブロックします。
イメージが正しいソースから pull されていることを確認するには、イメージがレジストリ サーバーから pull されていることを確認するをご覧ください。
イメージがレジストリ サーバーから pull されていることを確認する
イメージがレジストリ サーバーから pull されていることを確認する方法は、高度なクラスタが有効になっているかどうかによって異なります。
高度なクラスタが有効になっていない場合は、次のコマンドを実行します。
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \ --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}"
ADMIN_CLUSTER_KUBECONFIG
は、管理クラスタの kubeconfig ファイルのパスに置き換えます。このコマンドの出力には、クラスタ内のすべてのイメージが表示されます。すべての Google Distributed Cloud イメージが独自のリポジトリ サーバーから pull されていることを確認できます。
高度なクラスタが有効になっている場合は、次の操作を行います。
containerd
がローカル レジストリからイメージを pull しているかどうかを判断するには、次の手順でconfig.toml
というファイルの内容を調べます。- ノードにログインして、ファイル(
/etc/containerd/config.toml
)の内容を調べます。 config.toml
ファイルのplugins."io.containerd.grpc.v1.cri".registry.mirrors
フィールドを確認して、レジストリ サーバーがendpoint
フィールドにリストされているかどうかを確認します。以下は、
config.toml
ファイルの例からの抜粋です。version = 2 root = "/var/lib/containerd" state = "/run/containerd" ... [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io"] [plugins."io.containerd.grpc.v1.cri".registry.configs."privateregistry2.io".tls] ca_file = '/etc/containerd/certs.d/privateregistry2.io/ca.crt' [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"] endpoint = ["http://privateregistry.io", "http://privateregistry2.io"] ...
レジストリ ミラーが
endpoint
フィールドに表示される場合、ノードは Artifact Registry ではなくレジストリ ミラーからイメージを pull します。
- ノードにログインして、ファイル(