次の方法で共有


チュートリアル: 接続レジストリ拡張機能の安全なデプロイ方法

これらのチュートリアルでは、Arc 対応 Kubernetes クラスターにおける接続レジストリ拡張機能のさまざまなデプロイ シナリオについて説明します。 接続レジストリ拡張機能をインストールすると、クラウド レジストリからオンプレミスまたはリモートの場所にイメージを同期できます。

始める前に、少し時間を取って Arc 対応 Kubernetes の概念的な動作について学習します。

接続レジストリは、さまざまな暗号化手法を使用して安全にデプロイできます。 デプロイを正常に行うには、クイックスタート ガイドに従って前提条件やその他の関連情報を確認します。 既定では、接続レジストリは、HTTPS、ReadOnly モード、信頼配布、Cert Manager サービスで構成されています。 必要であればさらにカスタマイズと依存関係を、シナリオに応じて追加できます。

Cert Manager サービスとは

接続レジストリ Cert Manager は、Azure Arc 対応 Kubernetes クラスターの接続レジストリ拡張機能の TLS 証明書を管理するサービスです。 証明書の作成、更新、配布を処理することにより、接続レジストリと他のコンポーネントとの間の安全な通信を保証します。 このサービスは、接続レジストリのデプロイの一環としてインストールするか、既存の Cert Manager が既にクラスターにインストールされている場合は、それを使用することもできます。

Cert Manager は、さまざまなソースからの TLS 証明書の管理と発行を自動化するオープン ソースの Kubernetes アドオンです。 また、CA サービスを使用して作成された CA プールで発行された証明書のライフサイクルを管理し、証明書が有効であり、失効前に更新されるようにします。

信頼配布とは

接続レジストリ信頼配布とは、クラスター内の接続レジストリ サービスと Kubernetes クライアントの間で信頼を安全に分散するプロセスを指します。 これは、Cert Manager などの証明機関 (CA) を使用して TLS 証明書に署名し、それをレジストリ サービスとクライアントの両方に配布することで実現します。 これにより、すべてのエンティティがお互い安全に認証できるようになり、Kubernetes クラスター内で安全で信頼できる環境が維持されます。

前提条件

このチュートリアルを完了するには、以下が必要です。

プリインストールされている Cert Manager を使用して、接続レジストリ拡張機能をデプロイする

このチュートリアルでは、クラスターにプリインストールされた Cert Manager サービスを使用する方法について説明します。 このセットアップにより、証明書管理を制御できるようになり、指定された手順に従って、暗号化された接続レジストリ拡張機能をデプロイできるようになります。

クイックスタートaz-k8s-extension-create コマンドを実行し、cert-manager.enabled=true および cert-manager.install=false パラメーターを設定して、Cert Manager サービスがインストールされ、有効になっていることを確認します。

    az k8s-extension create --cluster-name myarck8scluster \ 
    --cluster-type connectedClusters \ 
    --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup \ 
    --config service.clusterIP=192.100.100.1 \ 
    --config cert-manager.install=false \ 
    --config-protected-file protected-settings-extension.json

独自の証明書の持ち込み (BYOC) を使用して、接続レジストリ拡張機能をデプロイする

このチュートリアルでは、クラスター上で独自の証明書の持ち込み (BYOC) を使用する方法について説明します。 BYOC では、独自の公開証明書と秘密キーのペアを使用できるため、証明書の管理を制御できます。 このセットアップでは、指定された手順に従って、暗号化された接続レジストリ拡張機能をデプロイできます。

Note

BYOC は、Kubernetes ノードで既に信頼されている独自の証明書を持ち込む顧客に適用されます。 証明書を信頼するためにノードを手動で更新することは推奨されません。

クイックスタートに従って、公開証明書と秘密キーの文字列変数と値のペアを追加します。

  1. 接続レジストリ サービス IP を SAN として自己署名 SSL 証明書を作成する
  mkdir /certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/mycert.key -x509 -days 365 -out /certs/mycert.crt -addext "subjectAltName = IP:<service IP>"
  1. これらの証明書ファイルの Base64 エンコードされた文字列を取得する
export TLS_CRT=$(cat mycert.crt | base64 -w0) 
export TLS_KEY=$(cat mycert.key | base64 -w0) 
  1. JSON 形式の秘密の保護された設定ファイルの例:

Note

公開証明書と秘密キーのペアを Base64 形式でエンコードし、保護された設定ファイルに追加する必要があります。

    {
    "connectionString": "[connection string here]",
    "tls.crt": $TLS_CRT,
    "tls.key": $TLS_KEY,
    "tls.cacrt": $TLS_CRT
    } 
  1. cert-manager.enabled=falsecert-manager.install=false に設定された変数を構成することで、公開証明書と秘密キーのペアの管理を使用して、HTTPS (TLS 暗号化) で接続レジストリ拡張機能をデプロイできます。 これらのパラメーターを使用すると、公開証明書と秘密キーのペアが代わりに暗号化に使用されるため、Cert Manager はインストールされず、有効にもなりません。

  2. 保護された設定ファイルを編集した後、デプロイ用に az-k8s-extension-create コマンドを実行します。

    az k8s-extension create --cluster-name myarck8scluster \
    --cluster-type connectedClusters \  
    --extension-type  Microsoft.ContainerRegistry.ConnectedRegistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup \
    --config service.clusterIP=192.100.100.1 \
    --config cert-manager.enabled=false \
    --config cert-manager.install=false \ 
    --config-protected-file protected-settings-extension.json 
    

Kubernetes シークレットの管理を用いて接続レジストリをデプロイする

このチュートリアルでは、クラスター上で Kubernetes シークレットを使用する方法を示します。 Kubernetes シークレットを使用すると、クラスター内のポッド間で許可されたアクセスを安全に管理できます。 このセットアップでは、指定された手順に従って、暗号化された接続レジストリ拡張機能をデプロイできます。

クイックスタートに従って、Kubernetes TLS 秘密文字列変数と値のペアを追加します。

  1. 接続レジストリ サービス IP を SAN として自己署名 SSL 証明書を作成する
mkdir /certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/mycert.key -x509 -days 365 -out /certs/mycert.crt -addext "subjectAltName = IP:<service IP>"
  1. これらの証明書ファイルの Base64 エンコードされた文字列を取得する
export TLS_CRT=$(cat mycert.crt | base64 -w0) 
export TLS_KEY=$(cat mycert.key | base64 -w0) 
  1. k8s シークレットを作成する
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: k8secret
  type: kubernetes.io/tls
data:
  ca.crt: $TLS_CRT
  tls.crt: $TLS_CRT
  tls.key: $TLS_KEY
EOF
  1. JSON 形式の秘密の保護された設定ファイルの例:

        { 
        "connectionString": "[connection string here]",
        "tls.secret": “k8secret” 
        } 
    

ここで、cert-manager.enabled=falsecert-manager.install=false に設定された変数を構成することで、Kubernetes シークレットの管理を使用して、HTTPS (TLS 暗号化) で接続レジストリ拡張機能をデプロイできます。 これらのパラメーターを使用すると、Kubernetes シークレットが代わりに暗号化に使用されるため、Cert Manager はインストールされず、有効にもなりません。

  1. 保護された設定ファイルを編集した後、デプロイ用に az-k8s-extension-create コマンドを実行します。

    az k8s-extension create --cluster-name myarck8scluster \
    --cluster-type connectedClusters \  
    --extension-type  Microsoft.ContainerRegistry.ConnectedRegistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup \
    --config service.clusterIP=192.100.100.1 \
    --config cert-manager.enabled=false \
    --config cert-manager.install=false \ 
    --config-protected-file protected-settings-extension.json 
    

独自の信頼配布を使用して接続レジストリをデプロイし、接続レジストリの既定の信頼配布を無効にする

このチュートリアルでは、クラスター上で信頼配布を構成する方法を示します。 独自の Kubernetes シークレット証明書または公開証明書と秘密キーのペアを使用しながら、TLS 暗号化、固有の信頼配布を使用し、接続レジストリの既定の信頼配布を拒否して、接続レジストリ拡張機能をデプロイできます。 このセットアップでは、指定された手順に従って、暗号化された接続レジストリ拡張機能をデプロイできます。

  1. クイックスタートに従って、Kubernetes シークレットまたは公開証明書、および秘密キーの変数と値のペアを、JSON 形式の保護された設定ファイルに追加します。

  2. クイックスタートaz-k8s-extension-create コマンドを実行し、接続レジストリ信頼分布を拒否するように trustDistribution.enabled=falsetrustDistribution.skipNodeSelector=false パラメーターを設定します。

    az k8s-extension create --cluster-name myarck8scluster \ 
    --cluster-type connectedClusters \ 
    --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup \ 
    --config service.clusterIP=192.100.100.1 \
    --config trustDistribution.enabled=false \ 
    --config cert-manager.enabled=false \
    --config cert-manager.install=false \ 
    --config-protected-file <JSON file path> 
    

これらのパラメーターを使用すると、Cert Manager はインストールされないか、有効になりません。さらに、接続レジストリの信頼配布は適用されません。 代わりに、接続レジストリとクライアント ノード間の信頼の確立にクラスター指定の信頼配布を使用します。

リソースをクリーンアップする

デプロイされた接続レジストリ拡張機能を削除すると、対応する接続レジストリのポッドと構成設定も削除されます。

  1. az-k8s-extension-delete コマンドを実行して、接続レジストリ拡張機能を削除します。

    az k8s-extension delete --name myconnectedregistry 
    --cluster-name myarcakscluster \ 
    --resource-group myresourcegroup \ 
    --cluster-type connectedClusters
    
  2. az acr connected-registry delete コマンドを実行して接続レジストリを削除します。

    az acr connected-registry delete --registry myacrregistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup
    

接続レジストリ拡張機能と接続レジストリを削除すると、関連するすべてのリソースと構成が削除されます。

次のステップ