################## CONTAINER-REGISTRY ################## マネージド OCI イメージレジストリを作成するパッケージ。 +-------+--------------------+ | | 設定値 | +=======+====================+ | Chart | container-registry | +-------+--------------------+ 対応サービス ============ * Azure: `Azure Container Registry`_ (ACR) * Google Cloud: `Artifact Registry`_ * AWS: `Amazon Elastic Container Registry`_ (ECR) パッケージの機能 ================ 本パッケージでは、各クラウドのマネージドコンテナレジストリに関する以下の機能を提供します。 * クラスタから利用可能なコンテナレジストリを作成 * コンテナレジストリへのアクセス許可設定 * 各クライアントに対する readOnly と readWrite の権限設定が可能 * ネットワークに関する設定 (Azureのみ対応、今後 AWS/Google Cloud でも対応予定) * アクセス元IPによるアクセス許可・拒否の設定 * レプリケーション設定 * ライフサイクルポリシーの設定(AWSのみ対応) コンテナレジストリの作成 -------------------------- Azure ~~~~~~~ コンテナーレジストリ(ACR)を作成します。 Google ~~~~~~~ Artifact Registry の標準リポジトリを作成します。 仮想リポジトリ、リモートリポジトリには対応していません。 なおアーティファクトの形式は ``.Values.format`` に指定してください。 AWS ~~~~~~~ プライベートレジストリに、プライベートリポジトリ(認証あり)を作成します。 パブリックリポジトリ(認証なし)には対応していません。 コンテナレジストリへのアクセス許可設定 ------------------------------------------ 作成したコンテナレジストリに対するアクセス許可設定を行います。 CNAP クラスタからコンテナレジストリへのアクセスは初期状態で許可されているため、アクセス許可設定は不要です。 ``acl`` の設定を行うことで、作成したリポジトリにアクセス許可を設定することができます。 ``readOnly`` には読み込みのみの権限を付与したいクライアント、 ``readWrite`` には読み込みおよび書き込みの権限を付与したいクライアントを列挙します。 .. code-block:: yaml acl: readOnly: - name: cnap-customer type: role readWrite: - name: data-writer type: role ``type`` には指定するクライアントの種類を指定し ``name`` 対象の識別子を type ごとの書式で指定します。 .. table:: ACL type に設定可能な値 +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | type | AWS | Azure | Google | Description | +=============+=====+=======+========+=======================================================================================================================================================+ | federatedId | ○ | | | 外部 ID プロバイダのアカウント IDを指定します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | service | ○ | | | サービスに権限を付与します。[service-name].amazonaws.com という形式で指定します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | role | ○ | | | ロールに権限を付与します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | sts | ○ | | | AssumeRoleにて引き受けたセッションロールに対して権限を付与します。"[role-name]/[session-name]" という形式でダブルクォーテーションで囲んで指定します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | mid | | ○ | | CNAP サービスで作成したユーザ割り当てマネージドIDの name を指定して権限を付与します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | objectId | | ○ | | ユーザー、グループ、サブスクリプション などのIDを指定して権限を付与します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | user | ○ | | ○ | ユーザーアカウントに権限を付与します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | domain | | | ○ | Google Workspace もしくは Cloud Identity のドメインに所属するユーザーに権限を付与します。 | | | | | | [USER_NAME]@[DOMAIN].com の ``DOMAIN`` 部分を指定します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | | | | | google サービスアカウントに権限を付与します。 | | gsa | | | ○ | [SERVICEACCOUNT]@[PROJECT_ID].iam.gserviceaccount.com | | | | | | の形式で指定します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | group | | | ○ | グループアカウントに権限を付与します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ ネットワークに関する設定 (Azureのみ対応) ------------------------------------------- インターネットまたはオンプレミスのネットワークからのアクセスを許可するための IP 範囲を追加します。 ipRules.value には、IPアドレスまたはIP範囲(CIDR)を指定します。IPv4のみ指定可能です。 defaultAction には、ipRulesにマッチしない場合のデフォルトアクションを指定します。 networkRuleBypassOptions に AzureServices を指定すると、信頼された Microsoft サービスによるこのコンテナー レジストリへのアクセスを許可します。 設定する場合には、azure.sku で Premium を選択してください。 .. code-block:: yaml networkRuleSet: defaultAction: Deny ipRules: - value: 123.123.123.123 action: Allow networkRuleBypassOptions: AzureServices レプリケーション設定 ------------------------------ 複数のロケーションへのイメージのレプリケーションを設定します。 Azure ~~~~~~~~~~~~~~~~~~~~~~~~ 同一リージョン内のアベイラビリティゾーンへのレプリケーションを設定することができます。 Geoレプリケーションには対応していません。 .. code-block:: yaml location: name: japaneast replication: type: Zone Google ~~~~~~~~~~~~~~~~~~~~~~~~ ``asia`` , ``europe`` , ``us`` のマルチリージョンを選択することが可能です。 .. code-block:: yaml location: name: asia AWS ~~~~~~~~~~~~~~~~~~~~~~~~ レプリケーション設定では、プライベートレジストリのレプリケーション設定を登録しますが、 レプリケーション設定のリポジトリフィルタに、リポジトリ名( ``name`` )を設定します。 リポジトリフィルタでサポートされているフィルタは、リポジトリ名のプレフィックスのみであるため、リポジトリ名と前方一致するリポジトリがある場合、 ライフサイクルポリシーの設定 (AWSのみ対応) ------------------------------------------- リポジトリに push されたイメージのライフサイクルを設定します。 AWS ~~~~~~~~~~~~~~~~~~~~~~~~ ``lifecycle.policy`` には json 形式のライフサイクルポリシーを設定します。 例: .. code-block:: yaml lifecycle: enabled: true policy: | { "rules": [ { "rulePriority": 1, "description": "Expire images older than 14 days", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 14 }, "action": { "type": "expire" } } ] } コンテナレジストリの使用方法 ============================ Azure 使用方法 ---------------- `ACR` に登録したイメージを使用して、 basic-deployment, cronjob パッケージでアプリケーションを構築するには下記のように設定します。 .. code-block:: yaml image: repository: {レジストリ名}.azurecr.io/{リポジトリ名} tag: "{イメージのタグ名}" pullPolicy: IfNotPresent Google 使用方法 ---------------- `Artifact Registry` に登録したDockerイメージを使用して、 basic-deployment, cronjob パッケージでアプリケーションを構築するには下記のように設定します。 .. code-block:: yaml image: repository: {設定したリージョン名}-docker.pkg.dev/{GoogleプロジェクトID}/{レジストリ名}/{リポジトリ名} tag: "{イメージのタグ名}" pullPolicy: IfNotPresent AWS 使用方法 ------------ `ECR` に登録したイメージを使用して、 basic-deployment, cronjob パッケージでアプリケーションを構築するには下記のように設定します。 .. code-block:: yaml image: repository: {AWSアカウントID}.dkr.ecr.{リージョン}.amazonaws.com/{リポジトリ名} tag: "{イメージのタグ名}" pullPolicy: IfNotPresent Values ====== Default values -------------- .. literalinclude:: values/container-registry.values.yaml :language: yaml Schema reference ---------------- .. jsonschema:: schema/container-registry.schema.json Example ======= Example1. Azure --------------- .. literalinclude:: example/container-registry/example1_azure.yaml :language: yaml Example2. Google ---------------- .. literalinclude:: example/container-registry/example2_gcp.yaml :language: yaml Example3. AWS --------------- .. literalinclude:: example/container-registry/example3_aws.yaml :language: yaml Change Log ========== .. changelog:: :changelog-url: https://msp-project-gcp.an.r.appspot.com/managed/container-registry.html :github: https://github.com/sbopsv/MASTER-CONTAINER-HELM-CONTAINER-REGISTRY/releases/ .. _Azure Container Registry: https://azure.microsoft.com/ja-jp/services/container-registry/#overview .. _Artifact Registry: https://cloud.google.com/artifact-registry?hl=ja .. _Amazon Elastic Container Registry: https://aws.amazon.com/jp/ecr/