我正在尝试部署一个Jenkins,用JCASC的头盔来获取金库机密。我使用本地minikube来创建mi k8集群,并在我的计算机中使用本地vault实例(而不是在k8集群中)。
即使我尝试使用initContainerEnv和ContainerEnv,我也无法达到保险库的值。对于CASC_VAULT_TOKEN值,我使用vault根令牌。这是我在本地运行的helm命令:
helm upgrade --install -f values.yml mijenkins jenkins/jenkins下面是我的values.yml文件代码:
controller:
installPlugins:
# need to add this configuration-as-code due to a known jenkins issue: https://github.com/jenkinsci/helm-charts/issues/595
- "configuration-as-code:1414.v878271fc496f"
- "hashicorp-vault-plugin:latest"
# passing initial environments values to docker basic container
initContainerEnv:
- name: CASC_VAULT_TOKEN
value: "my-vault-root-token"
- name: CASC_VAULT_URL
value: "http://localhost:8200"
- name: CASC_VAULT_PATHS
value: "cubbyhole/jenkins"
- name: CASC_VAULT_ENGINE_VERSION
value: "2"
ContainerEnv:
- name: CASC_VAULT_TOKEN
value: "my-vault-root-token"
- name: CASC_VAULT_URL
value: "http://localhost:8200"
- name: CASC_VAULT_PATHS
value: "cubbyhole/jenkins"
- name: CASC_VAULT_ENGINE_VERSION
value: "2"
JCasC:
configScripts:
here-is-the-user-security: |
jenkins:
securityRealm:
local:
allowsSignup: false
enableCaptcha: false
users:
- id: "${JENKINS_ADMIN_ID}"
password: "${JENKINS_ADMIN_PASSWORD}"在我的本地vault中,我可以看到/到达值:
>vault kv get cubbyhole/jenkins
============= Data =============
Key Value
--- -----
JENKINS_ADMIN_ID alan
JENKINS_ADMIN_PASSWORD acosta你们谁知道我可能做错了什么?
发布于 2022-04-08 02:01:30
调试了我的jenkins安装之后,我发现主要问题不是我的values.yml,也不是我的JCASC集成,因为我能够看到ContainerEnv值,如果我带着:
kubectl exec -ti mijenkins-0 -- sh因此,我需要公开我的金库服务器,这样我的jenkins就能够到达它,我使用这个金库教程来实现它。中的简单说明,而不是使用普通的:保险库服务器-dev
我们需要使用:
vault server -dev -dev-root-token-id root -dev-listen-address 0.0.0.0:8200然后,我们需要为保险库CLI导出一个环境变量,以处理vault服务器。
export VAULT_ADDR=http://0.0.0.0:8200在此之后,我们需要确定要重定向jenkins ping的保险库地址,为此我们需要启动minukube ssh会话:
minikube ssh在这个SSH会话中,检索Minikube主机的值。
$ dig +short host.docker.internal
192.168.65.2检索值之后,我们将检索Vault服务器的状态,以验证网络连接性。
$ dig +short host.docker.internal | xargs -I{} curl -s http://{}:8200/v1/sys/seal-status现在我们可以将jenkins吊舱与我们的保险库连接起来,只需更改CASC_VAULT_URL,在我们的主.yml文件中使用http://192.168.65.2:8200,如下所示:
- name: CASC_VAULT_URL
value: "http://192.168.65.2:8200"发布于 2022-04-06 07:57:47
我还没有在jenkins中使用Vault,所以我不太确定您的具体情况,但是我非常熟悉Jenkins舵图是多么的精巧,并且我能够配置我的securityRealm (使用Google插件),首先创建一个包含所需值的k8s秘密:
kubectl create secret generic googleoauth --namespace jenkins \
--from-literal=clientid=${GOOGLE_OAUTH_CLIENT_ID} \
--from-literal=clientsecret=${GOOGLE_OAUTH_SECRET}然后通过以下方式将这些值传递到舵图values.yml中:
controller:
additionalExistingSecrets:
- name: googleoauth
keyName: clientid
- name: googleoauth
keyName: clientsecret然后将它们读入JCasC,如下所示:
...
JCasC:
configScripts:
authentication: |
jenkins:
securityRealm:
googleOAuth2:
clientId: ${googleoauth-clientid}
clientSecret: ${googleoauth-clientsecret}为了使其工作,values.yml还需要包括以下设置:
serviceAccount:
name: jenkins
rbac:
readSecrets: true # allows jenkins serviceAccount to read k8s secrets请注意,我在命名空间k8s jenkins中将jenkins作为名为jenkins的jenkins运行。
https://stackoverflow.com/questions/71753971
复制相似问题