ssl - 是否可以在 OpenShift 3.11 (3.7+) 中使用 PodPresets?

标签 ssl kubernetes openshift kubernetes-pod okd

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

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

例如,当我在 OpenShift 集群中运行 docker-registry 部署时,由于创建的 Pod 无法访问主机根证书,它们再次提供了 x509: certificate signed by unknown authority 尝试从 docker.io 拉取图像时出错。我通过创建一个包含所有需要的根证书的 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 上阅读从 3.7 开始不再支持 PodPresets,所以我认为这可能是它不起作用的原因。

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 中注入(inject)这样的证书文件。这真的很棒。

最佳答案

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

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

关于ssl - 是否可以在 OpenShift 3.11 (3.7+) 中使用 PodPresets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57090050/

相关文章:

android - 使用 iOS 分布式应用程序时,Google Cloud Messaging 显示 "notRegistered"

kubernetes - 如何更改已创建集群的节点数

docker - 不支持将 Docker Compose 迁移到 Kubernetes 卷挂载

kubernetes - 在 GKE for NGINX Ingress Controller 上自动创建 ClusterRoleBinding

node.js - 如何在 NodeJS 中解码 X.509 主题(来自客户端证书)

security - 保护提交到不同域的表单

database - 如何删除 Openshift 应用程序上的数据库盒式磁带?

OpenShift 上的 Java 服务器

java - 将我的 .war 文件重命名为 ROOT.war 但仍然需要输入全名 +/appname

ssl - Jenkins 2 和 Atlassian Crowd(crowd2 插件)与双向 SSL 集成