3.7.2.2. 导入的证书问题的故障排除

如果在添加证书后出现问题,请验证 OpenShift Dev Spaces 实例级别和工作空间级别上的指定的值。

在 OpenShift Dev Spaces 实例级别验证导入的证书

  • 如果 OpenShift Dev Spaces Operator 部署,CheCluster 所在的命名空间包含带有正确内容标记的 ConfigMap:

    $ oc get cm --selector=app.kubernetes.io/component=ca-bundle,app.kubernetes.io/part-of=che.eclipse.org -n openshift-devspaces

    输入以下内容来检查 ConfigMap 的内容:

    $ oc get cm <name> -n openshift-devspaces -o yaml
  • OpenShift Dev Spaces Pod Volumes 列表中包含一个使用 ca-certs-merged ConfigMap 作为 data-source 的卷。要获取 OpenShift Dev Spaces Pod 的 Volumes 列表,请运行:

    $ oc get pod -o json <devspaces-pod-name> -n openshift-devspaces | jq .spec.volumes
  • OpenShift Dev Spaces 在 OpenShift Dev Spaces 服务器的 /public-certs/ 文件夹中挂载证书。要查看此文件夹中的文件列表,请输入:

    $ oc exec -t <devspaces-pod-name> -n openshift-devspaces -- ls /public-certs/
  • 在 OpenShift Dev Spaces 服务器日志中,每个证书都添加到 Java 信任存储中,包括配置的 OpenShift Dev Spaces 证书。查看它们:

    $ oc logs <devspaces-pod-name> -n openshift-devspaces
  • OpenShift Dev Spaces 服务器 Java 信任存储包含证书。证书 SHA1 指纹位于信任存储中包含的证书的 SHA1 列表中。查看列表:

    $ oc exec -t <devspaces-pod-name> -n openshift-devspaces -- keytool -list -keystore /home/user/cacerts
    Your keystore contains 141 entries:
    +
    (...)

    要在本地文件系统中获取证书的 SHA1 哈希,请运行:

    $ openssl x509 -in <certificate-file-path> -fingerprint -noout
    SHA1 Fingerprint=3F:DA:BF:E7:A7:A7:90:62:CA:CF:C7:55:0E:1D:7D:05:16:7D:45:60

在工作区级别上验证导入的证书

  • 启动工作区,获取创建它的项目名称并等待工作区启动。
  • 获取工作区 Pod 的名称:

    $ oc get pods -o=jsonpath='{.items[0].metadata.name}' -n <workspace namespace> | grep '^workspace.*'
  • 在工作区 Pod 中获取 Che-Theia IDE 容器的名称:

    $ oc get -o json pod <workspace pod name>  -n <workspace namespace> | \
        jq -r '.spec.containers[] | select(.name | startswith("theia-ide")).name'
  • 在工作区命名空间内查找 ca-certs ConfigMap:

    $ oc get cm ca-certs <workspace namespace>
  • 检查 ca-certs ConfigMap 中的条目是否包含您之前添加的所有附加条目。另外,它可以包含 ca-bundle.crt reserved 条目。查看条目:

    $ oc get cm ca-certs -n <workspace namespace> -o json | jq -r '.data | keys[]'
    ca-bundle.crt
    source-config-map-name.data-key.crt
  • 确认 ca-certs ConfigMap 已添加为工作区 Pod 中的卷:

    $ oc get -o json pod <workspace pod name> -n <workspace namespace> | \
        jq '.spec.volumes[] | select(.configMap.name == "ca-certs")'
    {
      "configMap": {
        "defaultMode": 420,
        "name": "ca-certs"
      },
      "name": "che-self-signed-certs"
    }
  • 确认卷已挂载到容器中,特别是 Che-Theia IDE 容器中:

    $ oc get -o json pod <workspace pod name> -n <workspace namespace> | \
       jq '.spec.containers[] | select(.name == "<theia ide container name>").volumeMounts[] | select(.name == "che-self-signed-certs")'
    {
      "mountPath": "/public-certs",
      "name": "che-self-signed-certs",
      "readOnly": true
    }
  • 检查 Che-Theia IDE 容器中的 /public-certs 文件夹,并检查其内容是否与 ca-certs ConfigMap 中的条目列表匹配:

    $ oc exec <workspace pod name> -c <theia ide container name> -n <workspace namespace> -- ls /public-certs
    ca-bundle.crt
    source-config-map-name.data-key.crt