ArgoCD:Helm 图表部署,并通过 AWS KMS 使用 Helm Secrets
[](https://res.cloudinary.com/practicaldev/image/fetch/s--ZQMwshiy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/820/1%2A8MDBjrYv5W2ANPok4EO3Tg.png) 在上一篇文章A
[](https://res.cloudinary.com/practicaldev/image/fetch/s--ZQMwshiy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/820/1%2A8MDBjrYv5W2ANPok4EO3Tg.png)
在上一篇文章ArgoCD:概述、SSL 配置和应用程序部署我们快速概述了如何使用 ArgoCD,现在让我们尝试部署 Helm 图表。
其中最有趣的部分是如何启用Helm Secrets。对此感到有些痛苦,但最后,它按预期工作。
内容
-
ArgCD:Helm 图表部署
-
ArgoCD:添加私有 Github 存储库
-
Github SSH 密钥
-
ArgoCD 存储库
-
添加 ArgoCD 应用程序
-
ArgoCD 和 Helm Secrets
-
具有共享卷的 InitContainer
-
构建安装了 helm-secrets 插件的 ArgoCD Docker 映像
-
SOPS 和 AWS KMS — 认证
-
AWS IAM 用户
-
AWS 凭证和配置
-
添加secrets.yaml
ArgCD:Helm 图表部署
创建测试图表:
$ helm create test-helm-chart
Creating test-helm-chart
进入全屏模式 退出全屏模式
在本地检查:
$ helm upgrade --install --namespace dev-1-test-helm-chart-ns --create-namespace test-helm-chart-release test-helm-chart/ --debug --dry-run
…
{}
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace dev-1-test-helm-chart-ns -l “app.kubernetes.io/name=test-helm-chart,app.kubernetes.io/instance=test-helm-chart-release” -o jsonpath=”{.items[0].metadata.name}”)
export CONTAINER_PORT=$(kubectl get pod --namespace dev-1-test-helm-chart-ns $POD_NAME -o jsonpath=”{.spec.containers[0].ports[0].containerPort}”)
echo “Visit [http://127.0.0.1:8080](http://127.0.0.1:8080) to use your application”
kubectl --namespace dev-1-test-helm-chart-ns port-forward $POD_NAME 8080:$CONTAINER_PORT
进入全屏模式 退出全屏模式
好的 - 它正在工作,将其推送到 Github 存储库。
ArgoCD:添加私有 Github 存储库
Github SSH 密钥
我们有一个 Github 组织。稍后将为 ArgoCD 创建一个专用的 Github 用户,但现在,我们可以向我们的帐户添加一个新的 RSA 密钥。
实际上,我们可以使用 login:token 来配置访问权限,但 key 似乎是更好的选择。
生成密钥:
$ ssh-keygen -f ~/.ssh/argocd-github-key
Generating public/private rsa key pair.
…
进入全屏模式 退出全屏模式
将其添加到 Github — Settings > SSH keys:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--URWwn0u8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/512/0%2AQIKLLnoILBCSdGNE.png)
ArgoCD 存储库
转到 Settings — Repositories:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--7Ix1HGEI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/948/0%2ArTER-ZUJBgVh-BdJ.png)
选择使用 SSH 连接存储库:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--Zn80ijrx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/738/0%2ANL2dlRLYLixpHc9m.png)
设置名称,URL,添加私钥:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--KPSZxMqQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/1024/0%2AQIle1tP8U7biweEz.png)
密钥将存储在 Kubernetes Secret 中:
$ kk -n dev-1-devops-argocd-ns get secrets
NAME TYPE DATA AGE
argocd-application-controller-token-mc457 kubernetes.io/service-account-token 3 45h
argocd-dex-server-token-74r75 kubernetes.io/service-account-token 3 45h
argocd-secret Opaque 5 45h
argocd-server-token-54mfx kubernetes.io/service-account-token 3 45h
default-token-6mmr5 kubernetes.io/service-account-token 3 45h
repo-332507798 Opaque 1 13m
进入全屏模式 退出全屏模式
repo-332507798 — 在这里。
单击_连接_。
添加 ArgoCD 应用程序
创建一个新应用程序:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--TQqaRlcr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/713/0%2APd5fHaNkHNfeJWUD.png)
设置其名称,Project 保留_default_,在_Sync Policy to Auto-create namespace 中启用即可:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--gIsxkX9L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/880/0%2Ag-bEjTywKsXr4uOw.png)
在 Source 离开 Git,设置存储库的 URL,在 Revision 中指定一个分支,在 Path — path 到我们图表的目录。
在当前情况下,存储库是 devops-kubernetes,chart 的目录 — tests/test-helm-chart/,ArgoCD 将扫描 repo 并建议您选择其中的可用目录:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--j_S4iqpr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/758/0%2AJKQzhl1xlrPy8tX3.png)
在 Destination 选择的本地 Kubernetes 集群中,将命名空间设置为将要部署图表的位置:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--2kRStBM0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/692/0%2AYBhXtBT-CyL9tlak.png)
在 Destination 而不是 Directory 中设置了 Helm,虽然 Argo 发现这是存储库中的 helm-chart 目录并且已经设置了 Helm 本身并且已经扫描了values.yaml
中的值。
可以将所有内容保留默认值,稍后我们将在此处添加我们的secrets.yaml
:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--4ZvIgBpX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/1024/0%2ALiaNFrPe6ndTEEnJ.png)
完毕:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--akyvBkjV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/712/0%2AMTAR7wD_a9ArcxTy.png)
如果您现在单击该应用程序,您将看到 ArgoCD 已经扫描了模板并创建了一个清单以显示将从该 Helm 图表中部署哪些资源:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--GWrxCiJ---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1 .medium.com/max/1024/0%2ALTk4bh0cyUTXLtew.png)
单击 Sync,您可以在此处看到可用的选项,例如 Prune 和 Dry Run:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--tiotDuBK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/1024/0%2AMT_Dg909A-MywU-w.png)
点击 Synchronize — 开始部署:
[](https://res.cloudinary.com/practicaldev/image/fetch/s---Dnmw7Kd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1 .medium.com/max/1024/0%2AlMLXqpNznsinm1xU.png)
完成 — 一切都已启动并正在运行:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--0gd4PI1v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/1024/0%2A1QF2qNLrZKYqfxqc.png)
现在检查应用程序列表:
$ argocd app list
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
guestbook [https://kubernetes.default.svc](https://kubernetes.default.svc) default default Synced Healthy <none> <none> [https://github.com/argoproj/argocd-example-apps.git](https://github.com/argoproj/argocd-example-apps.git) guestbook HEAD
test-helm-chart [https://kubernetes.default.svc](https://kubernetes.default.svc) dev-1-devops-test-helm-chart-ns default Synced Healthy <none> <none> git@github.com:***/devops-kubernetes.git tests/test-helm-chart DVPS-458-ArgoCD
进入全屏模式 退出全屏模式
命名空间中的一个 pod:
$ kubectl -n dev-1-devops-test-helm-chart-ns get pod
NAME READY STATUS RESTARTS AGE
test-helm-chart-67dccc9fb4–2m5rf 1/1 Running 0 2m27s
进入全屏模式 退出全屏模式
而现在我们可以去Helm Secrets配置。
ArgoCD 和 Helm Secrets
所以,在我们不想使用我们的秘密之前,一切都变得如此简单,因为 ArgoCD 中的 Helm 没有安装必要的插件。
可用选项是按照文档here>>>使用 ArgoCD 构建自定义 Docker 映像,或者通过共享卷使用 Kubernetes InitContainer 安装插件,如here>>>所述。
具有共享卷的 InitContainer
我尝试的第一个解决方案是带有共享卷的 InitContainer,总的来说,它工作正常 — 插件已安装。
_ argocd-repo-server __ 的部署是下一个:
--------
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: repo-server
app.kubernetes.io/name: argocd-repo-server
app.kubernetes.io/part-of: argocd
name: argocd-repo-server
spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
template:
metadata:
labels:
app.kubernetes.io/name: argocd-repo-server
spec:
automountServiceAccountToken: false
initContainers:
- name: argo-tools
image: alpine/helm
command: [sh, -c]
args:
- apk add git &&
apk add curl &&
apk add bash &&
helm plugin install [https://github.com/futuresimple/helm-secrets](https://github.com/futuresimple/helm-secrets)
volumeMounts:
- mountPath: /root/.local/share/helm/plugins/
name: argo-tools
containers:
- command:
- uid_entrypoint.sh
- argocd-repo-server
- --redis
- argocd-redis:6379
image: argoproj/argocd:v1.7.9
imagePullPolicy: Always
name: argocd-repo-server
ports:
- containerPort: 8081
- containerPort: 8084
readinessProbe:
initialDelaySeconds: 5
periodSeconds: 10
tcpSocket:
port: 8081
volumeMounts:
- mountPath: /app/config/ssh
name: ssh-known-hosts
- mountPath: /app/config/tls
name: tls-certs
- mountPath: /app/config/gpg/source
name: gpg-keys
- mountPath: /app/config/gpg/keys
name: gpg-keyring
- mountPath: /home/argocd/.local/share/helm/plugins/
name: argo-tools
volumes:
- configMap:
name: argocd-ssh-known-hosts-cm
name: ssh-known-hosts
- configMap:
name: argocd-tls-certs-cm
name: tls-certs
- configMap:
name: argocd-gpg-keys-cm
name: gpg-keys
- emptyDir: {}
name: gpg-keyring
- emptyDir: {}
name: argo-tools
进入全屏模式 退出全屏模式
这里是一个以_argo-tools_名称创建的emptyDir卷,然后一个名为_argo-tools_的initContainer以这个卷启动并附加到/root/.local/share/helm/plugins/
目录,然后安装git
、curl
和bash
,最后执行helm plugin install https://github.com/futuresimple/helm-secrets
。
同一个卷_argo-tools_挂载到_argocd-repo-server pod,因为/home/argocd/.local/share/helm/plugins/
目录和_argocd-repo-server容器中的helm
可以看到插件并能够使用它。
但问题来了:我们如何执行helm secrets install
命令?默认情况下,ArgoCD 调用/usr/local/bin/helm
二进制文件,并且无法为其指定其他参数。
因此,不得不使用第二个选项 — 使用 helm-secrets 构建自定义映像,并安装sops
,并编写一个包装脚本来执行 helm 二进制文件。
构建安装了 helm-secrets 插件的 ArgoCD Docker 映像
该解决方案在此处搜索 — 如何使用 ArgoCD 和 Sops 处理 Kubernetes 机密。
首先 — 需要编写我们的包装脚本。
必须使用template
、install
、upgrade
、lint
和diff
参数调用脚本而不是/usr/local/bin/helm
二进制文件,并将带有所有参数的命令传递给helm secrets
。
执行helm secrets @arguments
后 - 打印输出并删除“removed 'secrets.yaml.dec'”字符串:
#! /bin/sh
# helm secrets only supports a few helm commands
if [$1 = "template"] || [$1 = "install"] || [$1 = "upgrade"] || [$1 = "lint"] || [$1 = "diff"]
then
# Helm secrets add some useless outputs to every commands including template, namely
# 'remove: <secret-path>.dec' for every decoded secrets.
# As argocd use helm template output to compute the resources to apply, these outputs
# will cause a parsing error from argocd, so we need to remove them.
# We cannot use exec here as we need to pipe the output so we call helm in a subprocess and
# handle the return code ourselves.
out=$(helm.bin secrets $@)
code=$?
if [$code -eq 0]; then
# printf insted of echo here because we really don't want any backslash character processing
printf '%s\n' "$out" | sed -E "/^removed '.+\.dec'$/d"
exit 0
else
exit $code
fi
else
# helm.bin is the original helm binary
exec helm.bin $@
fi
进入全屏模式 退出全屏模式
接下来是使用 helm-secrets 和sops
构建自己的 Docker 映像,并用我们的 wrapper 替换/usr/local/bin/helm
。
找到最新的 SOPS 版本 —https://github.com/mozilla/sops/releases/和最新版本的 Helm-secrets — https://github.com/zendesk/helm-secrets/releases ](https://github.com/zendesk/helm-secrets/releases)。
编写一个 Dockerfile:
FROM argoproj/argocd:v1.7.9
ARG SOPS_VERSION="v3.6.1"
ARG HELM_SECRETS_VERSION="2.0.2"
USER root
COPY helm-wrapper.sh /usr/local/bin/
RUN apt-get update --allow-insecure-repositories --allow-unauthenticated && \
apt-get install -y \
curl \
gpg && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
curl -o /usr/local/bin/sops -L [https://github.com/mozilla/sops/releases/download/${SOPS\_VERSION}/sops-${SOPS\_VERSION}.linux](https://github.com/mozilla/sops/releases/download/%24%7BSOPS_VERSION%7D/sops-%24%7BSOPS_VERSION%7D.linux) && \
chmod +x /usr/local/bin/sops && \
cd /usr/local/bin && \
mv helm helm.bin && \
mv helm2 helm2.bin && \
mv helm-wrapper.sh helm && \
ln helm helm2 && \
chmod +x helm helm2
# helm secrets plugin should be installed as user argocd or it won't be found
USER argocd
RUN /usr/local/bin/helm.bin plugin install [https://github.com/zendesk/helm-secrets](https://github.com/zendesk/helm-secrets) --version ${HELM_SECRETS_VERSION}
ENV HELM_PLUGINS="/home/argocd/.local/share/helm/plugins/"
进入全屏模式 退出全屏模式
构建镜像—— 下面的存储库是公开的,所以你可以从这里使用镜像。
使用用于构建它的 ArgoCD 加上您自己的内部版本号标记图像,这里将是 1:
$ docker build -t setevoy/argocd-helm-secrets:v1.7.9–1 .
$ docker push setevoy/argocd-helm-secrets:v1.7.9–1
进入全屏模式 退出全屏模式
现在,需要更新用于在中部署 ArgoCD 的install.yaml
上一篇文章。
SOPS 和 AWS KMS — 认证
在我们的例子中,我们使用来自 AWS Key Management Service 的密钥,因此来自setevoy/argocd-helm-secrets:v1.7.9-1
映像的容器中的 SOPS 必须有权访问 AWS 账户和此密钥。
SOPS需要~/.aws/credentials
和~/.aws/config
文件,我们将从 Kubernetes Secrets 挂载到 pod。
实际上,这可以通过ServiceAccount和 IAM 角色来完成 — 但是现在,让我们来处理文件。
AWS IAM 用户
创建专用 AWS 用户来访问密钥 — 转到 AWS IAM,将其设置为_Programmatic access_:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--id2_lgqZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/870/0%2Apeq2b5wezxqcJeB7.png)
接下来,创建一个只读 IAM 策略,该策略只能访问 SOPS 使用的这个密钥:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--1r3NfcJi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/845/0%2AmnvsmPPAG11KKvdK.png)
[](https://res.cloudinary.com/practicaldev/image/fetch/s--zj6ljmXT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/874/0%2ATCSZY3WFwD46vcHn.png)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"kms:ListKeys",
"kms:ListAliases",
"kms:DescribeKey",
"kms:ListKeyPolicies",
"kms:GetKeyPolicy",
"kms:GetKeyRotationStatus",
"iam:ListUsers",
"iam:ListRoles"
],
"Resource": "arn:aws:kms:us-east-2:534 ***385:key/f73daf0d-*** -440ca3b6547b",
"Effect": "Allow"
}
]
}
进入全屏模式 退出全屏模式
保存并附加到用户:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--C2mwFaM7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/892/0%2AV2C7P0-RCOI1Tcl0.png)
保存用户,转到 AWS KMS,添加一个关键用户:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--ScY_rbRF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/941/0%2AGvnRLV1Ee77vzrsF.png)
配置本地 AWS 配置文件:
$ aws configure --profile argocd-kms
AWS Access Key ID [None]: AKI***Q4F
AWS Secret Access Key [None]: S7c***6ya
Default region name [None]: us-east-2
Default output format [None]:
进入全屏模式 退出全屏模式
检查访问:
$ aws --profile argocd-kms kms describe-key --key-id f73daf0d-***-440ca3b6547b
{
“KeyMetadata”: {
“AWSAccountId”: “534***385”,
“KeyId”: “f73daf0d-***-440ca3b6547b”,
“Arn”: “arn:aws:kms:us-east-2:534 ***385:key/f73daf0d-*** -440ca3b6547b”,
…
进入全屏模式 退出全屏模式
此配置文件将用于加密我们的机密,并且此配置文件需要添加到 argocd-repo-server pod。
AWS 凭证和配置
使用~/.aws/credentials
和~/.aws/config
内容创建一个新的 Kubernetes Secret,然后它们将映射到 argocd-repo-server pod:
--------
apiVersion: v1
kind: Secret
metadata:
name: argocd-aws-credentials
namespace: dev-1-devops-argocd-ns
type: Opaque
stringData:
credentials: |
[argocd-kms]
aws_access_key_id = AKI***Q4F
aws_secret_access_key = S7c***6ya
config: |
[profile argocd-kms]
region = us-east-2
进入全屏模式 退出全屏模式
将文件添加到.gitignore
:
$ cat .gitignore
argocd-aws-credentials.yaml
进入全屏模式 退出全屏模式
稍后,什么时候会为 ArgoCD 推出自动化,这个文件可以从 Jenkins Secrets 中创建。
创建秘密:
$ kubectl apply -f argocd-aws-credentials.yaml
secret/argocd-aws-credentials created
进入全屏模式 退出全屏模式
更新部署 argocd-repo-server - 更改要使用的镜像,从我们的 Secret 添加一个新卷,并将其作为/home/argocd/.aws
安装到使用 Argo 的 pod:
--------
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: repo-server
app.kubernetes.io/name: argocd-repo-server
app.kubernetes.io/part-of: argocd
name: argocd-repo-server
spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
template:
metadata:
labels:
app.kubernetes.io/name: argocd-repo-server
spec:
automountServiceAccountToken: false
containers:
- command:
- uid_entrypoint.sh
- argocd-repo-server
- --redis
- argocd-redis:6379
# image: argoproj/argocd:v1.7.9
image: setevoy/argocd-helm-secrets:v1.7.9-1
imagePullPolicy: Always
name: argocd-repo-server
ports:
- containerPort: 8081
- containerPort: 8084
readinessProbe:
initialDelaySeconds: 5
periodSeconds: 10
tcpSocket:
port: 8081
volumeMounts:
- mountPath: /app/config/ssh
name: ssh-known-hosts
- mountPath: /app/config/tls
name: tls-certs
- mountPath: /app/config/gpg/source
name: gpg-keys
- mountPath: /app/config/gpg/keys
name: gpg-keyring
- mountPath: /home/argocd/.aws
name: argocd-aws-credentials
volumes:
- configMap:
name: argocd-ssh-known-hosts-cm
name: ssh-known-hosts
- configMap:
name: argocd-tls-certs-cm
name: tls-certs
- configMap:
name: argocd-gpg-keys-cm
name: gpg-keys
- emptyDir: {}
name: gpg-keyring
- name: argocd-aws-credentials
secret:
secretName: argocd-aws-credentials
进入全屏模式 退出全屏模式
更新 ArgoCD 实例:
$ kubectl -n dev-1-devops-argocd-ns apply -f install.yaml
进入全屏模式 退出全屏模式
检查豆荚:
$ kubectl -n dev-1-devops-argocd-ns get pod
NAME READY STATUS RESTARTS AGE
…
argocd-repo-server-64f4bbf4b7-jcs6x 1/1 Terminating 0 19h
argocd-repo-server-7c64775679–9jjq2 1/1 Running 0 12s
进入全屏模式 退出全屏模式
检查文件:
$ kubectl -n dev-1-devops-argocd-ns exec -ti argocd-repo-server-7c64775679–9jjq2 -- cat /home/argocd/.aws/credentials
[argocd-kms]
aws_access_key_id = AKI***Q4F
aws_secret_access_key = S7c***6ya
进入全屏模式 退出全屏模式
让我们尝试使用 helm-secrets。
添加secrets.yaml
在带有图表的存储库中创建一个新的secrets.yaml
文件:
somePassword: secretValue
进入全屏模式 退出全屏模式
使用 KMS 密钥和 AWS 配置文件创建一个 .sops.yaml 文件:
--------
creation_rules:
- kms: 'arn:aws:kms:us-east-2:534 ****385:key/f73daf0d-*** -440ca3b6547b'
aws_profile: argocd-kms
进入全屏模式 退出全屏模式
加密文件:
$ helm secrets enc secrets.yaml
Encrypting secrets.yaml
Encrypted secrets.yaml
进入全屏模式 退出全屏模式
在测试图表中添加我们的秘密用法,例如 — 让我们创建一个名为TEST_SECRET_PASSWORD
的环境变量 - 更新templates/deployment.yaml
:
...
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: TEST_SECRET_PASSWORD
value: {{ .Values.somePassword }}
...
进入全屏模式 退出全屏模式
将更改推送到存储库:
$ git add secrets.yaml templates/deployment.yaml
$ git commit -m “test secret added” && git push
进入全屏模式 退出全屏模式
转到应用程序的设置 — App 详细信息 > 参数,单击 Edit 并将values.yaml
和secrets.yaml
指定为 Values Files:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--6hBl0wTZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/1024/0%2AxfeOdy1EGrulhUTb.png)
ArgoCD 现在看到应用程序没有与存储库中的数据同步:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--TUI2v3-n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images- 1.medium.com/max/1024/0%2A99QiRPODRiVF7lx1.png)
同步它:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--aJ0PezqP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/1015/0%2AdIPwMHAFGX9YeIcD.png)
检查新的 pod:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--MKwcEINo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/970/0%2AO7xiAe21OVL0UyTs.png)
和数据直接在 pod 中:
$ kubectl -n dev-1-devops-test-helm-chart-ns exec -ti test-helm-chart-5c777f9c9d-wkx6s -- printenv | grep SECRET
TEST_SECRET_PASSWORD=secretValue
进入全屏模式 退出全屏模式
全部完成 — 秘密就在这里。
最初发表于RTFM:Linux、DevOps 和系统管理.
更多推荐
所有评论(0)