This documentation is for a release that is no longer maintained
See documentation for the latest supported version.3.7. 配置网络
3.7.1. 配置网络策略
默认情况下,OpenShift 集群中的所有 Pod 都可以相互通信,即使它们在不同的命名空间中也是如此。在 OpenShift Dev Spaces 中,这使得一个用户项目中的工作区 Pod 可能会向另一个用户项目中的另一个工作区 Pod 发送流量。
为安全起见,可以使用 NetworkPolicy 对象配置多租户隔离,以限制用户项目中的 Pod 的所有传入通信。但是,OpenShift Dev Spaces 项目中的 Pod 必须能够与用户项目中的 Pod 通信。
先决条件
- OpenShift 集群有网络限制,如多租户隔离。
流程
将
allow-from-openshift-devspaces
NetworkPolicy 应用到每个用户项目。allow-from-openshift-devspaces
NetworkPolicy 允许将来自 OpenShift Dev Spaces 命名空间的传入流量到用户项目中的所有 Pod。例 3.34.
allow-from-openshift-devspaces.yaml
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-from-openshift-devspaces spec: ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: openshift-devspaces podSelector: {} policyTypes: - Ingress
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-from-openshift-devspaces spec: ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: openshift-devspaces
1 podSelector: {}
2 policyTypes: - Ingress
Copy to Clipboard Copied!
3.7.2. 配置 Dev Spaces 主机名
此流程描述了如何将 OpenShift Dev Spaces 配置为使用自定义主机名。
先决条件
-
具有对目标 OpenShift 集群的管理权限的活跃
oc
会话。请参阅 CLI 入门。 - 生成证书和私钥文件。
要生成私钥和证书的对,必须使用相同的证书颁发机构(CA)作为其他 OpenShift Dev Spaces 主机。
请求 DNS 供应商将自定义主机名指向集群入口。
流程
为 OpenShift Dev Spaces 预先创建项目:
oc create project openshift-devspaces
$ oc create project openshift-devspaces
Copy to Clipboard Copied! 创建 TLS secret:
oc create secret TLS <tls_secret_name> \ --key <key_file> \ --cert <cert_file> \ -n openshift-devspaces
$ oc create secret TLS <tls_secret_name> \
1 --key <key_file> \
2 --cert <cert_file> \
3 -n openshift-devspaces
Copy to Clipboard Copied! 在 secret 中添加所需的标签:
oc label secret <tls_secret_name> \ app.kubernetes.io/part-of=che.eclipse.org -n openshift-devspaces
$ oc label secret <tls_secret_name> \
1 app.kubernetes.io/part-of=che.eclipse.org -n openshift-devspaces
Copy to Clipboard Copied! - 1
- TLS secret 名称
配置
CheCluster
自定义资源。请参阅 第 3.1.2 节 “使用 CLI 配置 CheCluster 自定义资源”。spec: networking: hostname: <hostname> tlsSecretName: <secret>
spec: networking: hostname: <hostname>
1 tlsSecretName: <secret>
2 Copy to Clipboard Copied! - 如果 OpenShift Dev Spaces 已部署,请等待所有 OpenShift Dev Spaces 组件的推出完成。
3.7.3. 将不受信任的 TLS 证书导入到 Dev Spaces
OpenShift Dev Spaces 组件与外部服务通信通过 TLS 加密。它们需要由可信证书颁发机构(CA)签名的 TLS 证书。因此,您必须导入到 OpenShift Dev Spaces 中,所有不受信任的 CA 链供外部服务使用,例如:
- 代理
- 身份供应商(OIDC)
- 源代码存储库提供程序(Git)
OpenShift Dev Spaces 在 OpenShift Dev Spaces 项目中使用标记的配置映射作为 TLS 证书的源。配置映射可以具有任意数量的密钥,每个密钥都有随机数量的证书。
当 OpenShift 集群包含通过 cluster- wide-proxy 配置 添加的集群范围可信 CA 证书时,OpenShift Dev Spaces Operator 会检测到它们,并使用 config.openshift.io/inject-trusted-cabundle="true"
标签自动将它们注入到配置映射中。基于此注解,OpenShift 会在配置映射的 ca-bundle.crt
键内自动注入集群范围的可信 CA 证书。
先决条件
流程
将要导入的所有 CA 链 PEM 文件串联到
custom-ca-certificates.pem
文件中,并删除与 Java 信任存储不兼容的返回字符。cat ca-cert-for-{prod-id-short}-*.pem | tr -d '\r' > custom-ca-certificates.pem
$ cat ca-cert-for-{prod-id-short}-*.pem | tr -d '\r' > custom-ca-certificates.pem
Copy to Clipboard Copied! 使用所需的 TLS 证书创建
custom-ca-certificates
配置映射:oc create configmap custom-ca-certificates \ --from-file=custom-ca-certificates.pem \ --namespace=openshift-devspaces
$ oc create configmap custom-ca-certificates \ --from-file=custom-ca-certificates.pem \ --namespace=openshift-devspaces
Copy to Clipboard Copied! 标记
custom-ca-certificates
配置映射:oc label configmap custom-ca-certificates \ app.kubernetes.io/component=ca-bundle \ app.kubernetes.io/part-of=che.eclipse.org \ --namespace=openshift-devspaces
$ oc label configmap custom-ca-certificates \ app.kubernetes.io/component=ca-bundle \ app.kubernetes.io/part-of=che.eclipse.org \ --namespace=openshift-devspaces
Copy to Clipboard Copied! - 如果 OpenShift Dev Spaces 之前尚未部署,则部署 OpenShift Dev Spaces。否则,请等待 OpenShift Dev Spaces 组件推出完成。
- 重启运行工作区以使更改生效。
验证步骤
验证配置映射是否包含您的自定义 CA 证书。此命令以 PEM 格式返回您的自定义 CA 证书:
oc get configmap \ --namespace=openshift-devspaces \ --output='jsonpath={.items[0:].data.custom-ca-certificates\.pem}' \ --selector=app.kubernetes.io/component=ca-bundle,app.kubernetes.io/part-of=che.eclipse.org
$ oc get configmap \ --namespace=openshift-devspaces \ --output='jsonpath={.items[0:].data.custom-ca-certificates\.pem}' \ --selector=app.kubernetes.io/component=ca-bundle,app.kubernetes.io/part-of=che.eclipse.org
Copy to Clipboard Copied! 验证 OpenShift Dev Spaces pod 是否包含挂载
ca-certs-merged
配置映射的卷:oc get pod \ --selector=app.kubernetes.io/component=devspaces \ --output='jsonpath={.items[0].spec.volumes[0:].configMap.name}' \ --namespace=openshift-devspaces \ | grep ca-certs-merged
$ oc get pod \ --selector=app.kubernetes.io/component=devspaces \ --output='jsonpath={.items[0].spec.volumes[0:].configMap.name}' \ --namespace=openshift-devspaces \ | grep ca-certs-merged
Copy to Clipboard Copied! 验证 OpenShift Dev Spaces 服务器容器是否具有自定义 CA 证书。此命令以 PEM 格式返回您的自定义 CA 证书:
oc exec -t deploy/devspaces \ --namespace=openshift-devspaces \ -- cat /public-certs/custom-ca-certificates.pem
$ oc exec -t deploy/devspaces \ --namespace=openshift-devspaces \ -- cat /public-certs/custom-ca-certificates.pem
Copy to Clipboard Copied! 在 OpenShift Dev Spaces 服务器日志中验证导入的证书计数是否不是 null:
oc logs deploy/devspaces --namespace=openshift-devspaces \ | grep custom-ca-certificates.pem
$ oc logs deploy/devspaces --namespace=openshift-devspaces \ | grep custom-ca-certificates.pem
Copy to Clipboard Copied! 列出证书的 SHA256 指纹:
for certificate in ca-cert*.pem ;
$ for certificate in ca-cert*.pem ; do openssl x509 -in $certificate -digest -sha256 -fingerprint -noout | cut -d= -f2; done
Copy to Clipboard Copied! 验证 OpenShift Dev Spaces 服务器 Java 信任存储是否包含具有相同指纹的证书:
oc exec -t deploy/devspaces --namespace=openshift-devspaces -- \ keytool -list -keystore /home/user/cacerts \ | grep --after-context=1 custom-ca-certificates.pem
$ oc exec -t deploy/devspaces --namespace=openshift-devspaces -- \ keytool -list -keystore /home/user/cacerts \ | grep --after-context=1 custom-ca-certificates.pem
Copy to Clipboard Copied! - 启动一个工作区,获取创建它的项目名称:< workspace_namespace& gt;,并等待工作区启动。
验证
che-trusted-ca-certs
配置映射是否包含您的自定义 CA 证书。此命令以 PEM 格式返回您的自定义 CA 证书:oc get configmap che-trusted-ca-certs \ --namespace=<workspace_namespace> \ --output='jsonpath={.data.custom-ca-certificates\.custom-ca-certificates\.pem}'
$ oc get configmap che-trusted-ca-certs \ --namespace=<workspace_namespace> \ --output='jsonpath={.data.custom-ca-certificates\.custom-ca-certificates\.pem}'
Copy to Clipboard Copied! 验证工作区 pod 是否挂载
che-trusted-ca-certs
配置映射:oc get pod \ --namespace=<workspace_namespace> \ --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \ --output='jsonpath={.items[0:].spec.volumes[0:].configMap.name}' \ | grep che-trusted-ca-certs
$ oc get pod \ --namespace=<workspace_namespace> \ --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \ --output='jsonpath={.items[0:].spec.volumes[0:].configMap.name}' \ | grep che-trusted-ca-certs
Copy to Clipboard Copied! 验证
universal-developer-image
容器(或工作区 devfile 中定义的容器)是否挂载了che-trusted-ca-certs
卷:oc get pod \ --namespace=<workspace_namespace> \ --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \ --output='jsonpath={.items[0:].spec.containers[0:]}' \ | jq 'select (.volumeMounts[].name == "che-trusted-ca-certs") | .name'
$ oc get pod \ --namespace=<workspace_namespace> \ --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \ --output='jsonpath={.items[0:].spec.containers[0:]}' \ | jq 'select (.volumeMounts[].name == "che-trusted-ca-certs") | .name'
Copy to Clipboard Copied! 获取工作区 pod 名称 < workspace_pod_name>:
oc get pod \ --namespace=<workspace_namespace> \ --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \ --output='jsonpath={.items[0:].metadata.name}' \
$ oc get pod \ --namespace=<workspace_namespace> \ --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \ --output='jsonpath={.items[0:].metadata.name}' \
Copy to Clipboard Copied! 验证工作区容器是否具有自定义 CA 证书。此命令以 PEM 格式返回您的自定义 CA 证书:
oc exec <workspace_pod_name> \ --namespace=<workspace_namespace> \ -- cat /public-certs/custom-ca-certificates.custom-ca-certificates.pem
$ oc exec <workspace_pod_name> \ --namespace=<workspace_namespace> \ -- cat /public-certs/custom-ca-certificates.custom-ca-certificates.pem
Copy to Clipboard Copied!
其他资源
3.7.4. 添加标签和注解
3.7.4.1. 配置 OpenShift 路由以使用路由器分片
您可以配置标签、注解和域,以用于 路由器分片。
先决条件
-
具有 OpenShift 集群的管理权限的活跃
oc
会话。请参阅 OpenShift CLI 入门。 -
DSC
.请参阅: 第 1.2 节 “安装 dsc 管理工具”。
流程
配置
CheCluster
自定义资源。请参阅 第 3.1.2 节 “使用 CLI 配置 CheCluster 自定义资源”。spec: networking: labels: <labels> domain: <domain> annotations: <annotations>
spec: networking: labels: <labels>
1 domain: <domain>
2 annotations: <annotations>
3 Copy to Clipboard Copied!