首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将保险库中的秘密提取到我的jenkins配置中,作为带舵机的代码安装?

如何将保险库中的秘密提取到我的jenkins配置中,作为带舵机的代码安装?
EN

Stack Overflow用户
提问于 2022-04-05 14:54:44
回答 2查看 592关注 0票数 1

我正在尝试部署一个Jenkins,用JCASC的头盔来获取金库机密。我使用本地minikube来创建mi k8集群,并在我的计算机中使用本地vault实例(而不是在k8集群中)。

即使我尝试使用initContainerEnvContainerEnv,我也无法达到保险库的值。对于CASC_VAULT_TOKEN值,我使用vault根令牌。这是我在本地运行的helm命令:

代码语言:javascript
复制
helm upgrade --install -f values.yml mijenkins jenkins/jenkins

下面是我的values.yml文件代码:

代码语言:javascript
复制
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中,我可以看到/到达值:

代码语言:javascript
复制
>vault kv get cubbyhole/jenkins
============= Data =============
Key                       Value
---                       -----
JENKINS_ADMIN_ID          alan
JENKINS_ADMIN_PASSWORD    acosta

你们谁知道我可能做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-08 02:01:30

调试了我的jenkins安装之后,我发现主要问题不是我的values.yml,也不是我的JCASC集成,因为我能够看到ContainerEnv值,如果我带着:

代码语言:javascript
复制
kubectl exec -ti mijenkins-0 -- sh

因此,我需要公开我的金库服务器,这样我的jenkins就能够到达它,我使用这个金库教程来实现它。中的简单说明,而不是使用普通的:保险库服务器-dev

我们需要使用:

代码语言:javascript
复制
vault server -dev -dev-root-token-id root -dev-listen-address 0.0.0.0:8200

然后,我们需要为保险库CLI导出一个环境变量,以处理vault服务器。

代码语言:javascript
复制
export VAULT_ADDR=http://0.0.0.0:8200

在此之后,我们需要确定要重定向jenkins ping的保险库地址,为此我们需要启动minukube ssh会话:

代码语言:javascript
复制
minikube ssh

在这个SSH会话中,检索Minikube主机的值。

代码语言:javascript
复制
$ dig +short host.docker.internal
192.168.65.2

检索值之后,我们将检索Vault服务器的状态,以验证网络连接性。

代码语言:javascript
复制
$ 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,如下所示:

代码语言:javascript
复制
  - name: CASC_VAULT_URL
    value: "http://192.168.65.2:8200"
票数 0
EN

Stack Overflow用户

发布于 2022-04-06 07:57:47

我还没有在jenkins中使用Vault,所以我不太确定您的具体情况,但是我非常熟悉Jenkins舵图是多么的精巧,并且我能够配置我的securityRealm (使用Google插件),首先创建一个包含所需值的k8s秘密:

代码语言:javascript
复制
kubectl create secret generic googleoauth --namespace jenkins \
  --from-literal=clientid=${GOOGLE_OAUTH_CLIENT_ID} \
  --from-literal=clientsecret=${GOOGLE_OAUTH_SECRET}

然后通过以下方式将这些值传递到舵图values.yml中:

代码语言:javascript
复制
controller:
  additionalExistingSecrets:
  - name: googleoauth
    keyName: clientid
  - name: googleoauth
    keyName: clientsecret

然后将它们读入JCasC,如下所示:

代码语言:javascript
复制
...
  JCasC:
    configScripts:
      authentication: |
        jenkins:
          securityRealm:
            googleOAuth2:
              clientId: ${googleoauth-clientid}
              clientSecret: ${googleoauth-clientsecret}

为了使其工作,values.yml还需要包括以下设置:

代码语言:javascript
复制
serviceAccount:
  name: jenkins

rbac:
  readSecrets: true # allows jenkins serviceAccount to read k8s secrets

请注意,我在命名空间k8s jenkins中将jenkins作为名为jenkinsjenkins运行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71753971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档