在OpenShift中声明性地挂载服务账号密钥

92次阅读
没有评论

问题描述

在使用Helm Charts部署一些Webhook处理程序时遇到了问题。这些处理程序需要连接到它们所在的集群,以便在集群中部署配置。目前已经实现了这个功能,但是在将其中一个步骤移入Helm Chart中时遇到了困难。当Chart创建服务账号时,会为其创建一个随机命名的密钥:

$ oc describe sa sa-build-webhook-realworld
Name:                sa-build-webhook-realworld
Namespace:           your-eng2
Labels:              app=sa-build-webhook-realworld
Annotations:
Image pull secrets:  sa-build-webhook-realworld-dockercfg-4qz9g
Mountable secrets:   sa-build-webhook-realworld-token-bqtnw
                     sa-build-webhook-realworld-dockercfg-4qz9g
Tokens:              sa-build-webhook-realworld-token-bqtnw
                     sa-build-webhook-realworld-token-k7lq8
Events:              <none>

用户想要将这个密钥声明性地设置在部署配置中。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案

在OpenShift中,你可以通过设置spec.serviceAccountName字段来为部署配置(DeploymentConfig)指定使用的服务账号,这将自动将密钥挂载到容器中。
以下是在Helm Chart的YAML文件中如何声明性地设置服务账号及挂载密钥的步骤:

  1. 打开Helm Chart的YAML文件,可以在这里找到相应的文件。
  2. 找到或添加spec部分,添加或修改serviceAccountName字段,将其设置为你想要使用的服务账号的名称,即sa-build-webhook-realworld
  3. 确保部署配置中的容器可以访问挂载的密钥,你可以在容器的配置中指定挂载路径。

以下是一个示例Helm Chart的YAML片段:

apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
  name: webhook-realworld
  labels:
    app: webhook-realworld
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: webhook-realworld
    spec:
      serviceAccountName: sa-build-webhook-realworld
      containers:
        - name: webhook-container
          image: your_webhook_image:latest
          volumeMounts:
            - name: sa-secret-volume
              mountPath: /sa-secret-volume
      volumes:
        - name: sa-secret-volume
          secret:
            secretName: sa-build-webhook-realworld-token-bqtnw

在上述示例中,我们将serviceAccountName字段设置为sa-build-webhook-realworld,以使用该服务账号。然后,我们在容器配置中指定了挂载路径,并且创建了一个名为sa-secret-volume的卷,将其挂载为一个密钥类型的Secret。这样,在部署配置中使用这个服务账号时,相关的密钥将会被自动挂载到容器中。

通过这种方式,你可以在Helm Chart的YAML文件中声明性地设置服务账号及挂载密钥,从而实现部署配置和密钥的关联。

注意事项

值得注意的是,对于BuildConfig对象来说,情况稍有不同。它们的spec.serviceAccount字段命名不一致,设置该字段不会自动挂载与服务账号相关的密钥。另外,需要明确设置构建为“image puller”,否则构建不会自动拉取镜像。在OpenShift 3.11版本中,这个配置选项可能并不实用。

总之,在使用OpenShift时,通过设置spec.serviceAccountName字段,你可以实现声明性地挂载服务账号密钥,从而实现部署配置和密钥之间的关联。

正文完