Container Registryインスタンスからイメージをプルするには、インスタンスへのパスワード不要なアクセスを設定して、設定を簡素化し、イメージのプルを高速化できます。 このトピックでは、Container Registry Enterprise Editionインスタンスからイメージをプルするためのパスワードなしアクセスを設定する方法について説明します。
前提条件
次の要件が満たされています。
Container Registryが有効化されています。 Elastic Container InstanceのRAMロールは、Container Registryへのアクセスが許可されています。
Container Registry Enterprise Editionインスタンスが作成され、イメージリポジトリが設定されます。 詳細については、「Container Registry Enterprise Editionインスタンスを使用したイメージのプッシュとプル」をご参照ください。
背景情報
Container Registryは、Container Registry Personal EditionインスタンスとContainer Registry Enterprise Editionインスタンスを提供します。 Container Registry Enterprise Editionは、クラウドネイティブアプリケーション成果物のライフサイクルを管理するために使用されるエンタープライズグレードのプラットフォームです。 これらのアーティファクトには、コンテナイメージ、Helmチャート、およびOpen container Initiative (OCI) アーティファクトが含まれます。 Container Registry Enterprise Editionは、大規模なビジネス展開シナリオでContainer Service for Kubernetes (ACK) とシームレスに統合して、企業向けのアプリケーション配信を簡素化できます。 詳細については、「Container Registryの概要」をご参照ください。
Container Registryインスタンスのイメージリポジトリからイメージをプルすると、次のような状況が発生します。
エラスティックコンテナインスタンスと同じアカウントに属するContainer Registry Personal Editionインスタンス内のイメージの場合、パスワードを使用せずにイメージをプルできます。
Dockerイメージなどのコンテナレジストリ以外のイメージの場合、パスワードを使用せずにイメージをプルすることはできません。 API操作を呼び出してelasticコンテナインスタンスを作成する場合、ImageRegistryCredentialパラメーターを使用してパスワードを渡すことができます。
Container Registry Enterprise Editionインスタンスへのパスワードなしのアクセスの構成
Container Registryコンソールで、パスワードフリーアクセスを設定するインスタンスを見つけ、次のネットワークアクセス制御設定を設定します。
インターネット経由でのアクセスの設定
インターネットアクセスを有効にすると、パブリックドメイン名を使用して、Container Registry Enterprise Editionインスタンスのイメージに複数のリージョンからアクセスできます。 詳細については、「インターネット経由のアクセスの設定」をご参照ください。
仮想プライベートクラウド (VPC) を介したアクセスの設定
VPC経由でContainer Registry Enterprise Editionインスタンスへのアクセスを許可するには、必要な権限を付与する必要があります。 詳細については、「VPCへのアクセスの設定」をご参照ください。
Container Registry Enterprise Editionインスタンスを設定した後、後で使用するために、インスタンスID、インスタンス名、ドメイン名などのインスタンス情報を記録できます。
Kubernetesメソッドを使用して、パスワードを使用せずにContainer Registry Enterprise Editionインスタンスからイメージをプルする
アノテーションを追加して、イメージを取得するContainer Registry Enterprise Editionインスタンスを指定できます。
Kubernetesメソッドを使用する場合、指定できるContainer Registry Enterprise Editionインスタンスは1つだけです。 異なるイメージを含むContainer Registry Enterprise Editionインスタンスが複数ある場合は、イメージを1つのContainer Registry Enterprise Editionインスタンスに配置することを推奨します。 複数のContainer Registry Enterprise Editionインスタンスを設定する場合は、API操作を呼び出すことを推奨します。
例:
YAMLファイルを準備します。
次のサンプルコードは、test_cri.yamlの例です。
apiVersion: v1 種類: ポッド メタデータ: annotations: k8s.aliyun.com/acr-instance-id: "cri-j36zhodptmyq ****"# Container Registry Enterprise EditionインスタンスのIDを指定します。 名前: cri-test spec: containers: -image: test **** -registry.cn-beijing.cr.aliyuncs.com/eci_test/nginx:1.0# インターネット経由で画像を引き出します。 imagePullPolicy: Always name: nginx restartPolicy: 決して
説明Container Registry Enterprise Editionインスタンスは、複数のリージョンで使用できます。 したがって、ポッドのリージョンとは異なるリージョンに存在するContainer Registry Enterprise Editionインスタンスを指定できます。 これを行うには、Container Registry Enterprise EditionのリージョンIDのプレフィックスをContainer Registry Enterprise EditionインスタンスのIDに設定する必要があります。 例:
k8s.aliyun.com/acr-instance-id: "cn-beijing:cri-j36zhodptmyq ****"
ポッドを作成します。
kubectl apply -f test_cri.yaml
パスワードを使用せずにContainer Registry Enterprise EditionインスタンスからイメージをプルするAPI操作を呼び出す
CreateContainerGroup APIを呼び出してエラスティックコンテナインスタンスを作成する場合、AcrRegistryInfo関連のパラメーターを使用してパスワードなしのアクセスを設定できます。 下表にパラメーターを示します。 詳細については、「CreateContainerGroup」をご参照ください。
AcrRegistryInfo関連のパラメーターを使用してパスワードなしのアクセスを設定する場合は、AcrRegistryInfo.N.InstanceIdパラメーターを指定する必要があります。
パラメーター | タイプ | 例 | 説明 |
---|---|---|---|
AcrRegistryInfo.N.RegionId | String | cn-beijing | Container Registry Enterprise EditionインスタンスのリージョンID。 |
AcrRegistryInfo.N.InstanceId | String | cri-nwj395hgf6f3**** | Container Registry Enterprise EditionインスタンスのID。 |
AcrRegistryInfo.N. ドメイン. N | RepeatList | テスト **** -registry.cn-beijing.cr.aliyuncs.com | Container Registry Enterprise EditionインスタンスNのドメイン名N。デフォルトでは、インスタンスNのすべてのドメイン名が表示されます。 ドメイン名を指定できます。 複数のドメイン名はコンマ (,) で区切ります。 |
AcrRegistryInfo.N.InstanceName | String | テスト **** | Container Registry Enterprise Editionインスタンスの名前。 |
次の例は、AcrRegistryInfo関連のパラメーターを指定する方法を示しています。
例1: Container Registry Enterprise EditionインスタンスのリージョンID、ID、名前、およびドメイン名を指定します。
'Container.1.Image': 'test **** -registry.cn-beijing.cr.aliyuncs.com/eci_test/nginx:1.0', 'Container.1.Name': 'c1' 、'Container.2. イメージ ': 'test **** -registry-vpc.cn-beijing.cr.aliyuncs.com/eci_test/nginx:1.0', 'Container.2.Name': 'c2' 、# AcrRegistryInfo 'AcrRegistryInfo.1.RegionId ':'cn-beij' 、'AcrRegistryInfo.1.InstanceId': 'cri-nwj395hg ********* '、'AcrRegistryInfo.1.Domain.1 ': 'test **** -registry-vpc.cn-beijing.cr.aliyuncs.com' 、'AcrRegistryInfo.1.Domain.2 ': 'test **** -registry.cn-beijing.cr.aliyuncs.com'
例2: Container Registry Enterprise EditionインスタンスのIDと名前を指定します。
'Container.1.Image': 'test **** -registry.cn-beijing.cr.aliyuncs.com/eci_test/nginx:1.0', 'Container.1.Name': 'c1' 、'Container.2. イメージ ': 'test **** -registry-vpc.cn-beijing.cr.aliyuncs.com/eci_test/nginx:1.0', 'Container.2.Name': 'c2' 、# AcrRegistryInfo 'AcrRegistryInfo.1.InstanceId': 'cri-nwj395hg ********* '、'AcrRegistryInfo.1.InstanceName': 'test **** '
例3: Container Registry Enterprise EditionインスタンスのIDのみを指定します。
'Container.1.Image': 'test **** -registry.cn-beijing.cr.aliyuncs.com/eci_test/nginx:1.0', 'Container.1.Name': 'c1' 、'Container.2. イメージ ': 'test **** -registry-vpc.cn-beijing.cr.aliyuncs.com/eci_test/nginx:1.0', 'Container.2.Name': 'c2' 、# AcrRegistryInfo 'AcrRegistryInfo.1.InstanceId': 'cri-nwj395hg ******** '
SDKを使用してAcrRegistryInfo関連のパラメーターを指定することもできます。 次のサンプルコードは、SDK for Pythonを使用してAcrRegistryInfo関連のパラメーターを指定する方法の例を示しています。
#!/usr/bin/env python
# コーディング=utf-8
aliyunsdkcore.clientインポートからAcsClient
からaliyunsdkcore.acs_exception.exceptions import ClientException
aliyunsdkcore.acs_exception.exceptionsからServerExceptionをインポート
aliyunsdkeci.request.v20180808.CreateContainerGroupRequestインポートCreateContainerGroupRequestから
client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-beij')
request = CreateContainerGroupRequest()
request.set_accept_format('json')
request.set_SecurityGroupId("sg-2zeh4cev9y7ulbr *****")
request.set_VSwitchId("vsw-2zejlv7xjnw61w6z *****")
request.set_ContainerGroupName("test-cri")
request.set_Containers([
{
"画像": "test **** -registry.cn-beijing.cr.aliyuncs.com/eci_test/nginx:1.0" 、
"Name": "nginx"
},
{
"画像": "test **** -registry-vpc.cn-beijing.cr.aliyuncs.com/eci_test/nginx:1.0" 、
"Name": "nginx2"
}
])
request.set_AcrRegistryInfos([
{
"RegionId": "cn-beijing",
"InstanceId": "cri-nwj395hgf6f *****" 、
"ドメイン": [
"test **** -registry-vpc.cn-beijing.cr.aliyuncs.com" 、
「テスト **** -registry.cn-beijing.cr.aliyuncs.com」
]
}
])
response = client.do_action_with_exception (リクエスト)
# python2: プリント (レスポンス)
print(str(response, encoding='utf-8 '))