Configuring image discovery#

関連するインストールフェーズ Preparing your environment

前提条件#

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

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

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

概要#

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

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

Helmチャートの構成#

この機能を有効にするには、values.yaml を更新して、ビーコンにどこを見るかを指示する必要があります。

beaconAgent:
  provisioning:
    imageDiscovery: true
    imagesetDiscoveryContainerRegistryURL: "<your-private-registry-uri>"
    # Set to true only for self-signed/internal CA scenarios
    imagesetDiscoveryAllowInsecureRegistry: false

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 Registry (ACR)

<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

imagesetDiscoveryAllowInsecureRegistry#

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

imagesetDiscoveryAuthenticationType#

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

Registry provider

Supported

Recommended

EDB Repo 2.0

token

token

Azure Container Registry (ACR)

token, basic

token

Amazon Elastic Container Registry (ECR)

eks_managed_identity

eks_managed_identity

Google Artifact Registry GAR

token, basic

token

image_discovery_credentials_secret_name#

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

レジストリ権限の構成#

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

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

  • リポジトリのリスト

  • リストタグ

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

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

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

標準のOCIレジストリHarbor、Quay、Artifactoryなどを使用している場合、

**Image Pull Secret* *の作成時に指定したユーザー名/パスワードに、ターゲットリポジトリでread およびlist 権限があることを確認します。

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

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}"

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"

Kubernetes Secretの構成#

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

values.yaml で、 image_discovery_secret_name を確認します。

デフォルトでは、これはedb-cred に設定されます。

parameters:
  upm-beacon:
    image_discovery_secret_name: "edb-cred"

検証

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