このチュートリアルでは、Azure Arc 対応 Kubernetes クラスターまたは Azure Kubernetes Service (AKS) クラスターで Argo CD で GitOps を使用する方法について説明します。 Argo CD を使用した GitOps は 、クラスターの 構成とアプリケーションのデプロイの信頼できるソースとして Git リポジトリを使用できるクラスター拡張機能として有効になっています。 Argo CD では、Helm や Open Container Initiative (OCI) リポジトリなど、他の一般的なファイル ソースもサポートされています。
注
バージョン 1.0.0-preview 以降、Argo CD 拡張機能では コミュニティ Helm チャートが使用されます。 この変更は、構成キーが変更された場合の重大な変更です。 拡張機能の以前のバージョン (0.0.x) をインストールした場合は、拡張機能をアンインストールし、更新された構成キーを使用して最新のファイルを再インストールします。
重要
Argo CD での GitOps は現在プレビュー段階です。 ベータ版、プレビュー版、またはその他の一般提供にまだリリースされていない Azure 機能に適用される法的条件については、 Microsoft Azure プレビューの追加使用条件 を参照してください。
[前提条件]
GitOps を使用してアプリケーションをデプロイするには、Azure Arc 対応 Kubernetes クラスターまたは AKS クラスターが必要です。
Azure Arc 対応 Kubernetes クラスター
稼働している Azure Arc 対応 Kubernetes に接続されたクラスター。
Kubernetes クラスターを Azure Arc に接続する方法について説明します。送信プロキシ経由で接続する必要がある場合は、プロキシ 設定を使用して Arc エージェントをインストールしてください。
Microsoft.Kubernetes/connectedClustersリソースの種類に対する読み取りおよび書き込みアクセス許可。
Azure Kubernetes Service クラスター
稼働している MSI ベースの AKS クラスター。
重要
この拡張機能を機能させるには、サービス プリンシパル名 (SPN) ではなく、マネージド サービス ID (MSI) を使用して AKS クラスターを作成する必要があります。
az aks createを使用して作成した新しい AKS クラスターの場合、クラスターは既定で MSI ベースになります。 SPN ベースのクラスターを MSI に変換するには、az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identityを実行します。 詳細については、「 AKS でのマネージド ID の使用」を参照してください。Microsoft.ContainerService/managedClustersリソースの種類に対する読み取りおよび書き込みアクセス許可。
両方のクラスターの種類に共通
次のリソースの種類に対する読み取りと書き込みのアクセス許可。
Microsoft.KubernetesConfiguration/extensions
Azure CLI バージョン 2.15 以降。 Azure CLI をインストール するか、次のコマンドを使用して最新バージョンに更新します。
az version az upgradeKubernetes コマンド ライン クライアント kubectl。 Azure Cloud Shell を使用している場合、
kubectlは既にインストールされています。kubectlコマンドを使用して、az aks install-cliをローカルにインストールします。az aks install-cli次の Azure リソース プロバイダーの登録。
az provider register --namespace Microsoft.Kubernetes az provider register --namespace Microsoft.ContainerService az provider register --namespace Microsoft.KubernetesConfiguration登録は非同期プロセスであり、10 分以内に終了するはずです。 登録プロセスを監視するには、次のコマンドを使用します。
az provider show -n Microsoft.KubernetesConfiguration -o table Namespace RegistrationPolicy RegistrationState --------------------------------- -------------------- ------------------- Microsoft.KubernetesConfiguration RegistrationRequired Registered
ヒント
このチュートリアルのソースは Git リポジトリですが、Argo CD では Helm や Open Container Initiative (OCI) リポジトリなどの他の一般的なファイル ソースがサポートされています。
バージョンとリージョンのサポート
GitOps は現在、パブリック リージョンでサポートされています。
ネットワークの要件
GitOps エージェントが機能するには、ポート 22 (SSH) またはポート 443 (HTTPS) のリポジトリ ソースへの送信 (エグレス) TCP が必要です。 エージェントには、次の送信 URL へのアクセス権も必要です。
| エンドポイント (DNS) | 説明 |
|---|---|
https://management.azure.com |
エージェントで Kubernetes 構成サービスと通信するために必要です。 |
https://<region>.dp.kubernetesconfiguration.azure.com |
エージェントが状態をプッシュして構成情報をフェッチするためのデータ プレーン エンドポイント。
<region> (前述のサポートされているリージョン) に依存します。 |
https://login.microsoftonline.com |
Azure Resource Manager トークンを取得し、更新するために必要です。 |
https://mcr.microsoft.com |
コントローラーのコンテナーイメージをプルする必要があります。 |
CLI 拡張機能を有効にする
最新の CLI 拡張機能パッケージ k8s-configuration および k8s-extension をインストールします。
az extension add -n k8s-configuration
az extension add -n k8s-extension
これらのパッケージを最新バージョンに更新するには:
az extension update -n k8s-configuration
az extension update -n k8s-extension
インストールされているすべての Azure CLI 拡張機能とそのバージョンの一覧を表示するには、次のコマンドを使います。
az extension list -o table
Experimental ExtensionType Name Path Preview Version
------------- -------------- ----------------- ----------------------------------------------------- -------- --------
False whl connectedk8s C:\Users\somename\.azure\cliextensions\connectedk8s False 1.10.7
False whl k8s-configuration C:\Users\somename\.azure\cliextensions\k8s-configuration False 2.2.0
False whl k8s-extension C:\Users\somename\.azure\cliextensions\k8s-extension False 1.6.4
GitOps (Argo CD) 拡張機能を作成する (簡単なインストール)
GitOps Argo CD インストール では、高可用性 (HA) モードでのマルチテナントがサポートされ、ワークロード ID がサポートされます。
重要
HA モードは既定の構成であり、クラスター内の 4 つのノードをインストールできる必要があります。 次のコマンドでは、1 つのノードに拡張機能をインストールする --config "redis-ha.enabled=false" を追加します。
このコマンドは、Argo CD コンポーネントをクラスター全体のアクセス権を持つ新しい argocd 名前空間にインストールする最も簡単な構成を作成します。 クラスター全体のアクセスにより、Argo CD アプリ定義は、クラスター内の Argo CD configmap 構成に一覧表示されている名前空間で検出できます。 例: namespace1,namespace2
az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> \
--cluster-type managedClusters \
--name argocd \
--extension-type Microsoft.ArgoCD \
--config "redis-ha.enabled=false" \
--config "configs.params.application\.namespaces=namespace1,namespace2"
このインストール コマンドは、新しい <namespace> 名前空間を作成し、 <namespace>に Argo CD コンポーネントをインストールします。 この構成の Argo CD アプリケーション定義は、 <namespace> 名前空間でのみ機能します。
注
リソース制限などの追加の構成オプションについては、 values.yaml を参照してください。 拡張機能を構成するときは、Azure CLI コマンドでこれらの構成を使用します。
ワークロード ID を使用して GitOps (Argo CD) 拡張機能を作成する
運用環境での使用に推奨される別のインストール方法は、 ワークロード ID です。 この方法を使用すると、Microsoft Entra ID ID を使用して、Git リポジトリ内のシークレットや資格情報を管理しなくても、Azure リソースに対する認証を行うことができます。 このインストールでは、Argo CD の 3.0.0-rc2 以降の OSS バージョンで有効になっているワークロード ID 認証を利用します。
重要
HA モードは既定の構成であり、クラスター内の 4 つのノードをインストールできる必要があります。
'redis-ha.enabled': falseを使用して、1 つのノードに拡張機能をインストールします。
ワークロード ID を使用して拡張機能を作成するには、まず、次の変数をこの Bicep テンプレートの独自の値に置き換えます。
var clusterName = '<aks-or-arc-cluster-name>'
var workloadIdentityClientId = 'replace-me##-##-###-###'
var ssoWorkloadIdentityClientId = 'replace-me##-##-###-###'
var url = 'https://<public-ip-for-argocd-ui>/'
var oidcConfig = '''
name: Azure
issuer: https://login.microsoftonline.com/<your-tenant-id>/v2.0
clientID: <same-value-as-ssoWorkloadIdentityClientId-above>
azure:
useWorkloadIdentity: true
requestedIDTokenClaims:
groups:
essential: true
requestedScopes:
- openid
- profile
- email
'''
var defaultPolicy = 'role:readonly'
var policy = '''
p, role:org-admin, applications, *, */*, allow
p, role:org-admin, clusters, get, *, allow
p, role:org-admin, repositories, get, *, allow
p, role:org-admin, repositories, create, *, allow
p, role:org-admin, repositories, update, *, allow
p, role:org-admin, repositories, delete, *, allow
g, replace-me##-argocd-ui-entra-group-admin-id, role:org-admin
'''
resource cluster 'Microsoft.ContainerService/managedClusters@2024-10-01' existing = {
name: clusterName
}
resource extension 'Microsoft.KubernetesConfiguration/extensions@2023-05-01' = {
name: 'argocd'
scope: cluster
properties: {
extensionType: 'Microsoft.ArgoCD'
configurationSettings: {
'redis-ha.enabled': 'true'
'azure.workloadIdentity.enabled': 'true'
'azure.workloadIdentity.clientId': workloadIdentityClientId
'azure.workloadIdentity.entraSSOClientId': ssoWorkloadIdentityClientId
'configs.cm.oidc\\.config': oidcConfig
'configs.cm.url': url
'configs.rbac.policy\\.default': defaultPolicy
'configs.rbac.policy\\.csv': policy
'configs.params.application\\.namespaces': 'default, argocd'
}
}
}
Bicep テンプレートは、次のコマンドを使用して作成できます。
az deployment group create --resource-group <resource-group> --template-file <bicep-file>
注
リソース制限などの追加の構成オプションについては、 values.yaml を参照してください。 拡張機能を構成するときは、Bicep テンプレートでこれらの構成を使用します。
パラメーター
clusterName は、AKS または Arc 対応 Kubernetes クラスターの名前です。
workloadIdentityClientId
ssoWorkloadIdentityClientIdは、ワークロード ID に使用するマネージド ID のクライアント ID です。
ssoWorkloadIdentityClientIdは Argo CD UI の認証に使用され、workloadIdentityClientIdは Argo CD コンポーネントのワークロード ID に使用されます。 SSOWorkloadIdentityClientId の一般的なセットアップと構成の詳細については、 OIDC を使用した Microsoft Entra ID アプリ登録 認証に関するページを参照してください。
url は Argo CD UI のパブリック IP です。 クラスターに顧客が指定したイングレス コントローラーが既に存在しない限り、パブリック IP またはドメイン名はありません。 その場合は、デプロイ後に Argo CD UI にイングレス ルールを追加する必要があります。
oidcConfig - <your-tenant-id> を Microsoft Entra ID のテナント ID に置き換えます。
<same-value-as-ssoWorkloadIdentityClientId-above>をssoWorkloadIdentityClientIdと同じ値に置き換えます。
policy 変数は Argo CD の argocd-rbac-cm configmap 設定です。
g, replace-me##-argocd-ui-entra-group-admin-id は、Argo CD UI への管理者アクセスを提供する Microsoft Entra グループ ID です。 Microsoft Entra グループ ID は、Azure portal の Microsoft Entra ID > Groups >your-group-name> Properties にあります。 Microsoft Entra グループ ID の代わりに Microsoft Entra ユーザー ID を使用できます。 Microsoft Entra ユーザー ID は、Azure portal の Microsoft Entra ID > Users >your-user-name> Properties にあります。
ワークロード ID 資格情報の作成
新しいワークロード ID 資格情報を設定するには、次の手順に従います。
AKS クラスターまたは Arc 対応 Kubernetes クラスターの OIDC 発行者 URL を取得します。
マネージド ID を作成し、そのクライアント ID とテナント ID をメモします。
AKS クラスターまたは Arc 対応 Kubernetes クラスターのフェデレーション ID 資格情報を確立します。 例えば次が挙げられます。
# For source-controller az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${OIDC_ISSUER}" --subjectargocd または image-reflector コントローラー または argocd-repo-server がプルするリソースのワークロードアイデンティティに対して、必ず適切なアクセス許可を付与してください。 たとえば、Azure Container Registry を使用している場合は、
Container Registry Repository Reader( ABAC 対応レジストリの場合) またはAcrPull(ABAC 以外のレジストリの場合) が適用されていることを確認します。
ワークロード ID を使用してプライベート ACR レジストリまたは ACR リポジトリに接続する
プライベート ACR レジストリまたは ACR リポジトリを利用するには、プライベート ACR レジストリ に接続するための Argo CD の公式ドキュメントの指示に従います。 このガイドの [ポッドのラベル付け]、[フェデレーション ID 資格情報の作成]、[サービス アカウントへの注釈の追加] の手順は、Bicep デプロイを使用した拡張機能によって完了しているため、スキップできます。
Argo CD UI にアクセスする
AKS クラスター用の既存のイングレス コントローラーがない場合は、LoadBalancer サービスを使用して Argo CD UI を直接公開できます。 次のコマンドは、ポート 80 と 443 で Argo CD UI を公開します。
kubectl -n argocd expose service argocd-server --type LoadBalancer --name argocd-server-lb --port 80 --target-port 8080
Argo CD アプリケーションをデプロイする
Argo CD 拡張機能がインストールされたので、Argo CD UI または CLI を使用してアプリケーションをデプロイできます。 次の例では、 kubectl apply を使用して、Argo CD アプリケーション内の AKS ストアを、 argocd 名前空間の既定の Argo CD プロジェクトにデプロイします。
kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: aks-store-demo
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/Azure-Samples/aks-store-demo.git
targetRevision: HEAD
path: kustomize/overlays/dev
syncPolicy:
automated: {}
destination:
namespace: argocd
server: https://kubernetes.default.svc
EOF
AKS ストア デモ アプリケーションが argocd 名前空間にインストールされました。
次の手順に従って、アプリケーションの Web ページを参照してください。
httpではなく、httpsを使用して IP アドレスにアクセスしてください。
拡張機能の構成を更新する
Argo CD configmaps は、インストール後に次のコマンドを使用して、その他の拡張機能の構成設定を更新できます。
az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name argocd --config "configs.cm.url='https://<public-ip-for-argocd-ui>/auth/callback'"
拡張機能を使用して Argo CD 構成マップを更新し、設定が上書きされないようにします。 Bicep テンプレートの適用 は、Azure CLI を使用して構成を更新するための代替方法です。
拡張機能を削除する
拡張機能を削除するには、次のコマンドを使用します。
az k8s-extension delete -g <resource-group> -c <cluster-name> -n argocd -t managedClusters --yes
次のステップ
- Azure/AKS リポジトリで問題と機能の要求をファイルし、説明またはタイトルに必ず "ArgoCD" という単語を含めるようにします。
- Backstage と Cluster API Provider for Azure (CAPZ) またはクロスプレーンを使用して OSS Argo CD をデプロイする 、AKS-Platform エンジニアリング コード サンプルについて説明します。