【问题标题】:Is it possible to use PodPresets in OpenShift 3.11 (3.7+)?是否可以在 OpenShift 3.11 (3.7+) 中使用 PodPresets?
【发布时间】:2019-07-18 08:19:16
【问题描述】:

出于测试目的,我安装了一个 OpenShift 集群,并且由于我位于公司网络后面,因此我需要在任何想要发出外部请求的 Pod 中包含一些根证书。如何在 Pod 创建时自动注入这些证书?

我在本地 CentOS 7 虚拟机中运行 OpenShift Origin (OKD) 3.11,并在其上配置了 GlusterFS 存储。我的虚拟机本身已经存在多个问题,这在尝试访问网络时给了我错误:x509: certificate signed by unknown authority。我通过在 /etc/pki/ca-trust/source/anchors 中添加我的公司根证书并运行 update-ca-trust 命令来解决此问题。

例如,当我在 OpenShift 集群中运行 docker-registry 部署时,由于创建的 Pod 无权访问主机根证书,因此在尝试从 docker.io 拉取图像时再次出现 x509: certificate signed by unknown authority 错误.我通过创建一个包含所有需要的根证书的 ConfigMap 并将它们安装在注册表部署配置上的一个卷中解决了这个问题。

我以为我只需要在所有想要请求外部网络的部署配置中安装一个卷。但后来我配置了一个 Jenkins 实例,我意识到了一些新的东西:当管道运行时,Jenkins 会创建一个带有适配代理的 Pod(例如:Spring Boot 应用程序需要一个 Maven 代理)。由于我无法控制那些创建的 pod,因此它们无法拥有具有所有根证书的已安装卷。例如,在发布我的应用程序图表之前,我有一个运行 helm init --client-only 的管道,并且此命令给出了 x509: certificate signed by unknown authority 错误,因为此 pod 没有根证书。

x509 Error screenshot

我发现 PodPreset 可能是解决我的问题的完美方法,但是当我在集群中启用此功能并创建 PodPreset 时,不会填充新的 pod。我在OpenShift documentation 上读到 PodPresets 从 3.7 开始不再受支持,所以我认为这可能是它无法正常工作的原因。

OpenShift docs screenshot

这是我的 PodPreset 定义文件:

kind: PodPreset
apiVersion: settings.k8s.io/v1alpha1
metadata:
  name: inject-certs
spec:
  selector: {}
  volumeMounts:
    - mountPath: /etc/ssl/certs/cert1.pem
      name: ca
      subPath: cert1.pem
    - mountPath: /etc/ssl/certs/cert2.pem
      name: ca
      subPath: cert2.pem
    - mountPath: /etc/ssl/certs/cert3.pem
      name: ca
      subPath: cert3.pem
    - mountPath: /etc/ssl/certs/cert4.pem
      name: ca
      subPath: cert4.pem
    - mountPath: /etc/ssl/certs/cert5.pem
      name: ca
      subPath: cert5.pem
    - mountPath: /etc/ssl/certs/cert6.pem
      name: ca
      subPath: cert6.pem
  volumes:
    - configMap:
        defaultMode: 420
        name: ca-pemstore
      name: ca

我不知道是否有任何方法可以使 PodPresets 在 OpenShift 3.11 上运行,或者是否有另一种解决方案可以在创建的 pod 中注入这样的证书文件。这真的很棒。

【问题讨论】:

标签: ssl kubernetes openshift kubernetes-pod okd


【解决方案1】:

GitHub 上的 RedHat COP 包含一个带有 podpresent admission webhook 控制器的项目,您可以使用: https://github.com/redhat-cop/podpreset-webhook

基本上你部署该项目并将 PodPresent 中的 apiVersion 更改为 apiVersion: redhatcop.redhat.io/v1alpha1

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • @juanlumn 我没有链接答案 - 我链接了一个项目,该项目提供了一种使用 openshift 中已弃用和删除的功能的方法。如果那个项目消失了,这个答案也将毫无用处。我和你一样,只有链接的答案通常不好,但我链接到一个项目,没有这个答案没有价值。复制整个自述文件也无济于事,因为它很快就会过时。老实说,我不确定如何改进这个答案 - 但希望得到建议。
猜你喜欢
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多