CONTAINER-REGISTRY

マネージド OCI イメージレジストリを作成するパッケージ。

設定値

Chart

container-registry

対応サービス

パッケージの機能

本パッケージでは、各クラウドのマネージドコンテナレジストリに関する以下の機能を提供します。

  • クラスタから利用可能なコンテナレジストリを作成

  • コンテナレジストリへのアクセス許可設定
    • 各クライアントに対する readOnly と readWrite の権限設定が可能

  • ネットワークに関する設定 (Azureのみ対応、今後 AWS/Google Cloud でも対応予定)
    • アクセス元IPによるアクセス許可・拒否の設定

  • レプリケーション設定

  • ライフサイクルポリシーの設定(AWSのみ対応)

コンテナレジストリの作成

Azure

コンテナーレジストリ(ACR)を作成します。

Google

Artifact Registry の標準リポジトリを作成します。 仮想リポジトリ、リモートリポジトリには対応していません。

なおアーティファクトの形式は .Values.format に指定してください。

AWS

プライベートレジストリに、プライベートリポジトリ(認証あり)を作成します。 パブリックリポジトリ(認証なし)には対応していません。

コンテナレジストリへのアクセス許可設定

作成したコンテナレジストリに対するアクセス許可設定を行います。 CNAP クラスタからコンテナレジストリへのアクセスは初期状態で許可されているため、アクセス許可設定は不要です。

acl の設定を行うことで、作成したリポジトリにアクセス許可を設定することができます。 readOnly には読み込みのみの権限を付与したいクライアント、 readWrite には読み込みおよび書き込みの権限を付与したいクライアントを列挙します。

acl:
  readOnly:
  - name: cnap-customer
    type: role
  readWrite:
  - name: data-writer
    type: role

type には指定するクライアントの種類を指定し name 対象の識別子を type ごとの書式で指定します。

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 部分を指定します。

gsa

google サービスアカウントに権限を付与します。 [SERVICEACCOUNT]@[PROJECT_ID].iam.gserviceaccount.com の形式で指定します。

group

グループアカウントに権限を付与します。

ネットワークに関する設定 (Azureのみ対応)

インターネットまたはオンプレミスのネットワークからのアクセスを許可するための IP 範囲を追加します。 ipRules.value には、IPアドレスまたはIP範囲(CIDR)を指定します。IPv4のみ指定可能です。 defaultAction には、ipRulesにマッチしない場合のデフォルトアクションを指定します。 networkRuleBypassOptions に AzureServices を指定すると、信頼された Microsoft サービスによるこのコンテナー レジストリへのアクセスを許可します。 設定する場合には、azure.sku で Premium を選択してください。

networkRuleSet:
  defaultAction: Deny
  ipRules:
    - value: 123.123.123.123
      action: Allow
networkRuleBypassOptions: AzureServices

レプリケーション設定

複数のロケーションへのイメージのレプリケーションを設定します。

Azure

同一リージョン内のアベイラビリティゾーンへのレプリケーションを設定することができます。 Geoレプリケーションには対応していません。

location:
   name: japaneast
   replication:
      type: Zone

Google

asia , europe , us のマルチリージョンを選択することが可能です。

location:
   name: asia

AWS

レプリケーション設定では、プライベートレジストリのレプリケーション設定を登録しますが、 レプリケーション設定のリポジトリフィルタに、リポジトリ名( name )を設定します。 リポジトリフィルタでサポートされているフィルタは、リポジトリ名のプレフィックスのみであるため、リポジトリ名と前方一致するリポジトリがある場合、

ライフサイクルポリシーの設定 (AWSのみ対応)

リポジトリに push されたイメージのライフサイクルを設定します。

AWS

lifecycle.policy には json 形式のライフサイクルポリシーを設定します。

例:

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 パッケージでアプリケーションを構築するには下記のように設定します。

image:
  repository: {レジストリ名}.azurecr.io/{リポジトリ名}
  tag: "{イメージのタグ名}"
  pullPolicy: IfNotPresent

Google 使用方法

Artifact Registry に登録したDockerイメージを使用して、 basic-deployment, cronjob パッケージでアプリケーションを構築するには下記のように設定します。

image:
  repository: {設定したリージョン名}-docker.pkg.dev/{GoogleプロジェクトID}/{レジストリ名}/{リポジトリ名}
  tag: "{イメージのタグ名}"
  pullPolicy: IfNotPresent

AWS 使用方法

ECR に登録したイメージを使用して、 basic-deployment, cronjob パッケージでアプリケーションを構築するには下記のように設定します。

image:
  repository: {AWSアカウントID}.dkr.ecr.{リージョン}.amazonaws.com/{リポジトリ名}
  tag: "{イメージのタグ名}"
  pullPolicy: IfNotPresent

Values

Default values

# Default values for MASTER-CONTAINER-HELM-CONTAINER-REGISTRY.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

# レジストリ名
name: ""

# レジストリ
location:
  # ロケーション名
  # Google Cloudでマルチリージョンでの冗長化を行う場合、ロケーション名として asia, europe, us のいずれかを指定します。 シングルリージョンに構築する場合、 asia-northeast1 などリージョン名を指定します。
  name: ""
  # 冗長設定 (以下、location.replication は AWS/Azure の設定。Google Cloudは location.name で冗長化の設定を行います。)
  replication: 
    # 冗長化タイプ: None/MultiRegion(AWS)/Zone(Azure)
    # Azure で Zone(Availability Zones)を指定する場合、azure.sku で Premium を選択してください。
    type: None
    # 冗長先のロケーション(AWSで MultiRegion の場合に指定)
    destinations: []

# レジストリへのアクセスに関する ACL の設定です。
# - readOnly と readWrite の権限設定。
# - name に制御対象の名前。 types に制御対象の種別を指定します。
# - readOnly の設定で type が anonymous の場合は public access となる。 readWrite の設定では anonymous 設定は無視されます。
# - type でクライアントの種類を指定します (README 参照)。
# - ksa へのロール追加はサポートしないため ksa に紐づけて使うかどうかは pod を実行する側で設定する必要があります。
# - acl を指定しない場合、デフォルトでは同じクラウドアカウント内のクラスタからの readOnly アクセスのみ許可されます。
acl:
  readOnly: [] 
    # - name: hoge
    #   type: mid
    # - name: hoge@hoge.com
    #   type: user
  readWrite: []
    # - name: fuga@hoge.com
    #   type: user
    # - name: arn:aws:iam::1234567890:role/Infrastructure_Admin
    #   type: role

# 特定の条件に従って image を削除するといったライフサイクルの設定です。(AWSのみ対応)
lifecycle:
  enabled: false
  # AWS は json 形式でポリシーを設定
  policy: "{}"


azure:
  # k8s Namespace と同名のリソースグループ以外にコンテナレジストリを作成する場合にリソースグループ名を指定します。
  # 指定しない場合(デフォルト)では、k8s Namespace と同名のリソースグループにコンテナレジストリを作成します。
  # resourceGroupを指定する場合、事前にUserConfigを使用して、リソースグループを作成する必要があります。(既存のリソースグループに作成したい場合も同様の定義を追加する必要があります。)
  # resourceGroup: your-resource-group

  # コンテナーレジストリのSKU。
  # Basic, Standard, Premium が選択可能。Premiumでなければ利用できない機能があるので注意してください。
  sku: Basic

  # ファイアウォール設定
  # インターネットまたはオンプレミスのネットワークからのアクセスを許可するための IP 範囲を追加します。 
  # ipRules.value には、IPアドレスまたはIP範囲(CIDR)を指定します。IPv4のみ指定可能です。 
  # defaultAction には、ipRulesにマッチしない場合のデフォルトアクションを指定します。
  # networkRuleBypassOptions に AzureServices を指定すると、信頼された Microsoft サービスによるこのコンテナー レジストリへのアクセスを許可します。
  # 設定する場合には、azure.sku で Premium を選択してください。

  # networkRuleSet:
  #   defaultAction: Deny
  #   ipRules:
  #     - value: 123.123.123.123
  #       action: Allow
  # networkRuleBypassOptions: AzureServices

# レジストリに登録するアーティファクトのフォーマット。Google Cloudのみ(https://cloud.google.com/artifact-registry/docs/supported-formats)
format: DOCKER

# kubernetes 上からこの Helm を削除した際にクラウド上のストレージリソースを残すかどうかの設定です。
# true に設定すると Helm を削除してもクラウド上にレジストリリソースが残ります。
keepOnDelete: true

Schema reference

Values

type

object

properties

  • name

コンテナレジストリ名。

type

string

  • location

コンテナレジストリのロケーション

type

object

properties

  • name

コンテナレジストリのロケーション。

type

string

  • replication

冗長化設定

type

object

properties

  • type

冗長化タイプ: None/MultiRegion(AWS)/Zone(Azure)。Azure でZoneを選択する場合、azure.skuをPremiumにする必要があります。

type

string

enum

None, MultiRegion, Zone

default

None

  • destinations

冗長先のロケーション

type

array

items

type

string

  • keepOnDelete

true の場合パッケージアンインストール時にインスタンスを保持する。

type

boolean

default

True

  • acl

レジストリへのアクセスに関する ACL の設定

type

object

properties

  • readOnly

readonly権限の追加

type

array

items

type

object

properties

  • name

acl制御対象の名前(ユーザ名やグループ名など)

type

string

  • type

制御対象の種類. ユーザー、グループ、サービス、ロール(AWS), GSA, Mid all

type

string

enum

user, role, group, gsa, mid, domain, objectId, sts, federatedId, service

  • readWrite

readwrite権限の追加

type

array

items

type

object

properties

  • name

acl制御対象の名前(ユーザ名やグループ名など).

type

string

  • type

制御対象の種類. ユーザー、グループ、サービス、ロール(AWS), GSA, Mid all

type

string

enum

user, role, group, gsa, mid, domain, objectId, sts, federatedId, service

  • lifecycle

ライフサイクルの設定

type

object

properties

  • enabled

ライフサイクル設定の有効化

type

boolean

default

False

  • policy

ライフサイクルポリシー(JSON形式)

type

string

default

{}

  • azure

type

object

properties

  • resourceGroup

指定なし(デフォルト)の場合、k8s Namespace と同名のリソースグループにコンテナレジストリを作成します。Namespaceと異なるリソースグループに作成したい場合のみリソースグループ名を指定してください。

type

string

  • sku

コンテナーレジストリのSKU。

type

string

enum

Basic, Standard, Premium

default

Basic

  • networkRuleSet

ネットワークルール(ファイアウォール)設定。Premium SKUの場合のみ設定可

type

object

properties

  • defaultAction

ルールに合致しない場合のデフォルトアクション

type

string

enum

Deny, Allow

  • ipRules

IP ACLルール

type

array

items

type

object

properties

  • value

IPアドレスまたは、IPアドレス範囲(CIDR)。IPv4のみ許可

type

string

  • action

IP ACLアクション

type

string

enum

Allow

  • networkRuleBypassOptions

ファイアウォール例外設定。AzureServices: 信頼された Microsoft サービスによるこのコンテナー レジストリへのアクセスを許可

type

string

enum

AzureServices, None

  • format

レジストリに登録するパッケージのフォーマット(https://cloud.google.com/artifact-registry/docs/supported-formats)

type

string

enum

DOCKER, MAVEN, NPM, PYTHON, APT, YUM

default

DOCKER

Example

Example1. Azure

apiVersion: managed.msp.sbopsv/v1alpha1
kind: Application
metadata:
  name: my-container-registry
  namespace: staging
spec:
  chart:
    name: container-registry
    version: <latest>
  settings:
    name: registry-name
    location:
      name: japaneast
      replication: 
        type: Zone
    azure:
      sku: Premium
      networkRuleSet:
        defaultAction: Deny
        ipRules:
          - value: 123.123.123.123
            action: Allow
      networkRuleBypassOptions: AzureServices
    acl:
      readWrite:
        - name: XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXX
          type: objectId

Example2. Google

apiVersion: managed.msp.sbopsv/v1alpha1
kind: Application
metadata:
  name: my-container-registry
  namespace: staging
spec:
  chart:
    name: container-registry
    version: <latest>
  settings:
    name: registry-name
    location: 
      name: asia-northeast1
    acl:
      readWrite:
        - name: user@example.com
          type: user

Example3. AWS

apiVersion: managed.msp.sbopsv/v1alpha1
kind: Application
metadata:
  name: my-ecr
  namespace: staging
spec:
  chart:
    name: container-registry
    version: <latest>
  settings:
    name: registry-name
    location:
      name: ap-northeast-1
      replication: 
        type: MultiRegion
        destinations:
          - us-east-1
          - us-west-1
    acl:
      readOnly:
        - name: cnap_customer
          type: role
      readWrite:
        - name: cnap_user
          type: user
    keepOnDelete: true

Change Log

0.2.3

Released on 2025-08-07

What's Changed

パッケージ内で利用しているライブラリの更新を行いました。

0.2.2

Released on 2025-05-15

What's Changed

パッケージ内で利用しているライブラリの更新を行いました。

0.2.1

Released on 2025-02-12

What's Changed

パッケージ内で利用しているライブラリの更新を行いました。