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 |
|---|---|---|
docker.enterprisedb.com/pgai-platform |
docker.enterprisedb.com/pgai-platform |
|
<registry-name>.azurecr.io |
myregistry.azurecr.io |
|
<aws-account-id>.dkr.ecr.<aws-region-id>.amazonaws.com |
123456079902.dkr.ecr.us-east-1.amazonaws.com |
|
<gcp-region-id>-docker.pkg.dev |
us-east1-docker.pkg.dev |
|
registry.gitlab.com |
registry.gitlab.com |
|
localhost:32000 |
localhost:32000 |
imagesetDiscoveryContainerRegistryProvider#
このオプションは、imagesetDiscoveryContainerRegistryURL
にあるレジストリのプロバイダーを定義します。デフォルトはoci です。
Provider |
Description |
|---|---|
oci |
コンテナレジストリプロバイダーが`/v2/_catalog`エンドポイントを含む完全な OCI compliant である場合に、これを設定します。 |
gitlab |
コンテナレジストリプロバイダーが GitLabコンテナレジストリ の場合にこれを設定します。 |
レジストリプロバイダーごとに推奨されるプロバイダー値は次のとおりです。
Registry provider |
Provider value |
|---|---|
oci |
|
oci |
|
oci |
|
oci |
|
gitlab |
|
oci |
|
oci |
imagesetDiscoveryAllowInsecureRegistry#
このオプションが有効になっている場合、証明書の検証なしでTLS接続を確立できます。デフォルトはfalse
です。
imagesetDiscoveryAuthenticationType#
レジストリプロバイダーによってサポートされている認証タイプは次のとおりです。
Registry provider |
Supported |
Recommended |
|---|---|---|
token |
token |
|
token, basic |
token |
|
eks_managed_identity |
eks_managed_identity |
|
token, basic |
basic |
|
token |
token |
|
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 ポッドのログを確認します。 レジストリをスキャンし、イメージタグを検出していることを示すメッセージが表示されます。