今回はPrivate Repositoryの話
以前投稿した「AKSでGitOps(Flux v2)を使う(1)」の続きです。
今回はPrivate Repositoryの話になります。前回、GitRepositoryもHelmRepositoryもPublicに公開されているものを利用しました。 このため、認証など特に必要なくアクセスできました。しかし、実際にはPrivateなRepositoryを使うことも多いのではないでしょうか。
そうした場合にどのように設定すればよいか。今回はそうした点をご紹介していきたいと思います。
PrivateなHelm Repository
まずはHelm Repositoryのお話。ここで 以前の投稿「ACRでHelmチャートを共有する」の内容が活用されます。 ACRにHelmチャートをプッシュする方法については以前の投稿をご参照ください。
設定方法
1) Flux CLI Public RepositoryのときのようにYamlファイルで定義することもできますが、そうするとPrivateなリポジトリ名を Yamlファイルに記載しなければなりません。FluxのIaC定義ファイルのリポジトリがPrivateであれば問題ないのですが 今回はPublicなGit Repositoryに配置しているため、コマンドラインからHelmRepositoryの設定を投入したいと思います。
そのためにはFlux CLIをあらかじめローカルPCにインストールしておく必要があります。Fluxの公式ドキュメントを参考にインストールしてください。
2) ACRアクセス用サービスプリンシパルの登録
Helm RepositoryとなってるACRへアクセスするためのサービスプリンシパルを作成し、パスワードとユーザー名称を取得します。
SERVICE_PRINCIPAL_NAME=flux-demo-helm-registry ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv) PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME \ --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \ --role acrpull \ --query "password" --output tsv) USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)
3)Kubernetes Secretにユーザー名称とパスワードを格納
今回は簡単にユーザー名称とパスワードをSecretに格納します。(名称を helmrepocred としています)
kubectl create namespace flux-config # authentication for helm registry # first, create secret kubectl create secret docker-registry helmrepocred \ --namespace flux-config \ --docker-server=$ACR_NAME.azurecr.io \ --docker-username=$USER_NAME \ --docker-password=$PASSWORD
4) FluxのHelmRepositoryを作成
acr-helmという名称でHelmRepositoryを登録します。 --secret-refには上で作成したSecretの名称を指定します。
flux create source helm acr-helm \ --url=oci://$ACR_NAME.azurecr.io/helm \ --namespace flux-config \ --secret-ref=helmrepocred
5)HelmReleaseでHelmRepositoryを参照する
これで公開したくない情報の登録は完了です。あとはHelm ReleaseでこのHelmRepositoryを参照すればアクセスできるようになります。
apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: aggregator namespace: flux-config spec: targetNamespace: apps releaseName: aggregator chart: spec: chart: spring-boot-app version: 0.1.1 sourceRef: #作成したHelm Repositoryを参照 kind: HelmRepository name: acr-helm namespace: flux-config interval: 15m0s install: remediation: retries: 3 values: image: repository: turtle2005/aggregator tag: 1.0.0 service: type: LoadBalancer env: - name: TIMEFEED_HOST value: http://timefeed:8080 replicaCount: 3
PrivateなGit Repository
まずはGit Repositoryのお話。
今回はGitHubを使っています。
設定方法
1) GitHubのPAT(Personal Access Token)の取得
GitHubへのアクセスにはSSH等他のやり方もあると思いますが、この事例ではGitHubのPATを利用しています。
PATの作成方法はGitHubの公式ページをご確認ください。
作成したら環境変数にユーザー名と生成したトークンを設定します。
GITHUB_USER="Put your account" GITHUB_TOKEN="Put your PAT here"
2)Kubernetes Secretにユーザー名とトークンを格納
HelmRepository同様、情報をKubernetesのSecretに格納します。名称を sampleappscred としています。
kubectl create secret generic sampleappscred \ --namespace flux-config \ --from-literal=username="$GITHUB_USER" \ --from-literal=password="$GITHUB_TOKEN"
3) FluxのGitRepositoryを作成
GitRepositoryの指定を行います。 --urlの部分にPrivate のリポジトリを指定します。--secret-refには上で作ったSecret名称を指定します。
flux create source git sample-apps-private \ --url=<put your private repo> \ --namespace flux-config \ --branch=main \ --secret-ref=sampleappscred
4)Kustomization等で指定する
こちらも秘匿情報の登録は完了です。あとは作成したGitRepositoryを参照すればOKです。
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 kind: Kustomization metadata: name: flux-config-aggregator spec: interval: 5m targetNamespace: flux-config sourceRef: kind: GitRepository name: sample-apps-private # 上で作成したGitRepository名を指定する path: ./deploy/aggregator/production prune: true
デプロイ
これまでのサンプルで上記指定を行い、アプリケーションがデプロイされるようになりました。
ここまでくれば通常のアプリケーション環境でFluxによるGitOpsが実現できるようになると思います。
FluxにはNotificationやタグやSemVerを用いた更新のフィルタリングなど多くの機能がまだあります。 機会があればそうした機能もいずれご紹介できればと思います。
最後に
私達のチームでは、Azure・AKSを活用したシステムのSIや内製化のお手伝いをさせていただいております。 Azureやコンテナ技術の知見を持つエンジニアが対応いたします。ご相談等ありましたらぜひご連絡ください。