Configuring image discovery#

関連するインストールフェーズ Phase 4: Preparing the Environment

前提条件#

  • **Synced images to your local container registry** 完了済 - EDBイメージが設定されたプライベートレジストリが必要です。

  • レジストリコンプライアンス レジストリは OCI compliant である必要があります。

  • 権限 IAMロールAWS / GCPまたはレジストリアクセス制御オンプレミスを構成するためのアクセス。


概要#

イメージ検出 は、 HM内部ビーコンエージェント 内で実行されているバックグラウンドプロセスです。 プライベートコンテナレジストリに接続し、利用可能なPostgresバージョンタグをスキャンし、ハイブリッドマネージャーHMに登録します。

イメージ検出により、新しいデータベースバージョンをレジストリに同期すると、ユーザーが手動介入なしでプロビジョニングに自動的に利用できるようになります。

イメージ検出の構成#

この機能を有効にするには、レジストリの詳細を使用してビーコンエージェントを構成する必要があります。

HybridControlPlane CRを編集して、spec.beaconAgent の下にイメージ検出設定を追加します。

apiVersion: edbpgai.edb.com/v1alpha1
kind: HybridControlPlane
metadata:
  name: edbpgai
spec:
  beaconAgent:
    provisioning:
      imageDiscovery: true
      imagesetDiscoveryContainerRegistryURL: "<your-private-registry-uri>"
      # Set to true only for self-signed/internal CA scenarios
      imagesetDiscoveryAllowInsecureRegistry: false
    # ... your other beaconAgent settings

imageDiscovery#

このブールオプションは、イメージ検出機能を有効または無効にします。 デフォルトはfalse です。

imagesetDiscoveryContainerRegistryURL#

このオプションは、PostgreSQLコンテナイメージを検出するコンテナレジストリのURLを指定します。

Registry provider

Registry URL

Example

EDB Repo 2.0

docker.enterprisedb.com/pgai-platform

docker.enterprisedb.com/pgai-platform

Azure Container RegistryACR

<registry-name>.azurecr.io

myregistry.azurecr.io

Amazon Elastic Container Registry (ECR)

<aws-account-id>.dkr.ecr.<aws-region-id>.amazonaws.com

123456079902.dkr.ecr.us-east-1.amazonaws.com

Google Artifact Registry GAR

<gcp-region-id>-docker.pkg.dev

us-east1-docker.pkg.dev

GitLabコンテナレジストリ

registry.gitlab.com

registry.gitlab.com

MicroK8s Built-in Registry

localhost:32000

localhost:32000

imagesetDiscoveryContainerRegistryProvider#

このオプションは、imagesetDiscoveryContainerRegistryURL にあるレジストリのプロバイダーを定義します。デフォルトはoci です。

Provider

Description

oci

コンテナレジストリプロバイダーが`/v2/_catalog`エンドポイントを含む完全な OCI compliant である場合に、これを設定します。

gitlab

コンテナレジストリプロバイダーが GitLabコンテナレジストリ の場合にこれを設定します。

レジストリプロバイダーごとに推奨されるプロバイダー値は次のとおりです。

imagesetDiscoveryAllowInsecureRegistry#

このオプションが有効になっている場合、証明書の検証なしでTLS接続を確立できます。デフォルトはfalse です。

imagesetDiscoveryAuthenticationType#

レジストリプロバイダーによってサポートされている認証タイプは次のとおりです。

Registry provider

Supported

Recommended

EDB Repo 2.0

token

token

Azure Container RegistryACR

token, basic

token

Amazon Elastic Container Registry (ECR)

eks_managed_identity

eks_managed_identity

Google Artifact Registry GAR

token, basic

basic

GitLabコンテナレジストリ

token

token

MicroK8s Built-in Registry

none

none

image_discovery_credentials_secret_name#

この値は、イメージ検出のためのレジストリの資格情報を含むKubernetesシークレットの名前です。 デフォルトは「edb-cred」です。


レジストリ権限の構成#

HM内部ビーコンエージェントには、レジストリをスキャンするには特定の権限が必要です。

次のことができる必要があります。

  • リポジトリのリスト

  • リストタグ

  • タグマニフェストの読み取り

以下からプラットフォームを選択して、必要な権限を構成します。

汎用/オンプレミスRKE2/OpenShift#

標準のOCIレジストリHarbor、Quay、Artifactoryなどを使用している場合、 *Image Pull Secret* *を作成するときに指定したユーザー名/パスワードに、ターゲットリポジトリに対するread およびlist 権限があることを確認します。

レジストリのドキュメント例 Quay.io Permissions を参照して、サービスアカウントを構成します。

Azure Container RegistryACR#

Kubernetesイメージプルシークレットとして使用されるACRトークンには、_repositories_pull_metadata_read スコープマップが必要です。

az acr token create --name <token-name> --registry <registry-name> \
    --scope-map "_repositories_pull_metadata_read"

AWS Elastic Container Registry ECR#

ECRを使用するEKSで実行されている場合、 EKSマネージドIdentity が必要な認証方法です。

AmazonEC2ContainerRegistryReadOnly ポリシーでIAMロールを作成し、ビーコンのサービスアカウントに関連付ける必要があります。

このスクリプトを実行して、IAMロールとポッドIDを構成します。

#  Configuration Variables

EKS_CLUSTER_NAME="<eks_cluster_name>"
EKS_CLUSTER_REGION="<eks_cluster_region>"
IMAGE_DISCOVERY_IAM_ROLE_NAME="<iam_role_name>"

#  1. Create Trust Policy

cat <<EOF > ./image-discovery-trust.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
            "Effect": "Allow",
            "Principal": {
                "Service": "pods.eks.amazonaws.com"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:TagSession"
            ]
        }
    ]
}
EOF

#  2. Create Role & Attach Policy

aws iam create-role --role-name "${IMAGE_DISCOVERY_IAM_ROLE_NAME}" \
    --assume-role-policy-document file://image-discovery-trust.json

aws iam attach-role-policy --role-name "${IMAGE_DISCOVERY_IAM_ROLE_NAME}" \
    --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly

#  3. Associate with EKS Service Account

IMAGE_DISCOVERY_IAM_ROLE_ARN=$(aws iam get-role --role-name ${IMAGE_DISCOVERY_IAM_ROLE_NAME} | jq -r .Role.Arn)

aws eks create-pod-identity-association --cluster-name "${EKS_CLUSTER_NAME}" \
    --namespace upm-beacon \
    --service-account upm-beacon-agent-k8s \
    --role-arn "${IMAGE_DISCOVERY_IAM_ROLE_ARN}" \
    --region "${EKS_CLUSTER_REGION}"

パッケージインストールの追加構成#

パッケージをダウンロードして展開するために パッケージのインストール を許可するには、 kapp-controller コンポーネントへのECRアクセスを許可する必要があります。

kapp-controllerは、アプリケーションの展開中にECRからHelmチャートとパッケージマニフェストを取得します。この構成がないと、パッケージのインストールは資格情報エラーで失敗します。

kapp-controllerのポッドIDの関連付けを追加します。

#  Use the same IAM role ARN from above

aws eks create-pod-identity-association --cluster-name "${EKS_CLUSTER_NAME}" \
    --namespace kapp-controller \
    --service-account kapp-controller-sa \
    --role-arn "${IMAGE_DISCOVERY_IAM_ROLE_ARN}" \
    --region "${EKS_CLUSTER_REGION}"

Google Artifact Registry GAR#

GKEで実行されている場合、ビーコンが使用するサービスアカウントには、プロジェクトをリストし、アーティファクトを読み取る権限が必要です。

必要なロール

  • roles/artifactregistry.reader 画像を読み取るため

  • roles/browser 特にリポジトリを見つけるためのresourcemanager.projects.list

このスクリプトを実行して、IAMバインディングを適用します。

#  Replace with your Project ID and Service Account Name

PROJECT_ID="<your-project-id>"
SERVICE_ACCOUNT_EMAIL="<service-account-name>@${PROJECT_ID}.iam.gserviceaccount.com"

#  Grant Reader Role

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
    --role="roles/artifactregistry.reader"

#  Grant Browser Role (Required for discovery)

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
    --role="roles/browser"

GitLabコンテナレジストリ#

Kubernetesイメージプルシークレットとして使用される Personal access token には、次のスコープが必要です。

  • read_registry — プライベートプロジェクトのコンテナレジストリイメージへの読み取り専用アクセスを許可します。

  • read_api — プロジェクトとコンテナリポジトリへの読み取りアクセスを許可します。

詳細については、 GitLab Personal access token scopes を参照してください。

注釈

legacy トークンのみがサポートされています。 !!!


Kubernetes Secretの構成#

最後のステップは、どのKubernetes Secretにレジストリ資格情報が含まれているかをHMが知っていることを確認することですCloud Identityを使用しない場合。

spec.componentsParameters.upm-beacon の下のHybridControlPlane CRの資格情報のシークレット名を確認または更新します。

apiVersion: edbpgai.edb.com/v1alpha1
kind: HybridControlPlane
metadata:
  name: edbpgai
spec:
  componentsParameters:
    upm-beacon:
      image_discovery_credentials_secret_name: "edb-cred"
    # ... your other componentsParameters

更新されたCRを適用します。

kubectl apply -f hybridmanager.yaml

検証

これらの変更を適用した後、 HM-internal Beacon agent ポッドのログを確認します。 レジストリをスキャンし、イメージタグを検出していることを示すメッセージが表示されます。