此配置文件适用于旧版客户端或库。此配置文件基于旧版向后兼容性推荐配置。
旧版
配置文件要求最低 TLS 版本为 1.0。
对于 Ingress 控制器,最低 TLS 版本从 1.0 转换为 1.1。 |
TLS 安全配置文件为服务器提供了一种方法,用于规范客户端连接到服务器时可以使用哪些密码套件。这确保 OpenShift Container Platform 组件使用不允许已知不安全协议、密码套件或算法的加密库。
集群管理员可以选择为以下每个组件使用哪个 TLS 安全配置文件
Ingress 控制器
控制平面
这包括 Kubernetes API 服务器、Kubernetes 控制器管理器、Kubernetes 调度程序、OpenShift API 服务器、OpenShift OAuth API 服务器、OpenShift OAuth 服务器、etcd、机器配置操作符和机器配置服务器。
kubelet(当它充当 Kubernetes API 服务器的 HTTP 服务器时)
您可以使用 TLS(传输层安全)安全配置文件来定义各种 OpenShift Container Platform 组件所需的 TLS 密码套件。OpenShift Container Platform TLS 安全配置文件基于Mozilla 推荐的配置。
您可以为每个组件指定以下 TLS 安全配置文件之一
配置文件 | 描述 | ||
---|---|---|---|
|
|||
|
此配置文件是大多数客户端的推荐配置。它是 Ingress 控制器、kubelet 和控制平面的默认 TLS 安全配置文件。此配置文件基于中间版兼容性推荐配置。
|
||
|
此配置文件适用于无需向后兼容性的现代客户端。此配置文件基于现代版兼容性推荐配置。
|
||
|
此配置文件允许您定义要使用的 TLS 版本和密码套件。
|
使用预定义配置文件类型时,有效配置文件配置可能会在版本之间发生变化。例如,给定在 X.Y.Z 版本上部署的要使用中间版配置文件的规范,升级到 X.Y.Z+1 版本可能会导致应用新的配置文件配置,从而导致推出。 |
您可以查看以下每个组件的预定义 TLS 安全配置文件的最低 TLS 版本和密码套件:Ingress 控制器、控制平面和 kubelet。
配置文件的最低 TLS 版本和密码套件列表的有效配置可能因组件而异。 |
查看特定 TLS 安全配置文件的详细信息
$ oc explain <component>.spec.tlsSecurityProfile.<profile> (1)
1 | 对于 <component> ,请指定 ingresscontroller 、apiserver 或 kubeletconfig 。对于 <profile> ,请指定 old 、intermediate 或 custom 。 |
例如,要检查控制平面`intermediate`配置文件中包含的密码套件
$ oc explain apiserver.spec.tlsSecurityProfile.intermediate
KIND: APIServer
VERSION: config.openshift.io/v1
DESCRIPTION:
intermediate is a TLS security profile based on:
https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29
and looks like this (yaml):
ciphers: - TLS_AES_128_GCM_SHA256 - TLS_AES_256_GCM_SHA384 -
TLS_CHACHA20_POLY1305_SHA256 - ECDHE-ECDSA-AES128-GCM-SHA256 -
ECDHE-RSA-AES128-GCM-SHA256 - ECDHE-ECDSA-AES256-GCM-SHA384 -
ECDHE-RSA-AES256-GCM-SHA384 - ECDHE-ECDSA-CHACHA20-POLY1305 -
ECDHE-RSA-CHACHA20-POLY1305 - DHE-RSA-AES128-GCM-SHA256 -
DHE-RSA-AES256-GCM-SHA384 minTLSVersion: TLSv1.2
查看组件的tlsSecurityProfile
字段的所有详细信息
$ oc explain <component>.spec.tlsSecurityProfile (1)
1 | 对于<component> ,请指定ingresscontroller 、apiserver 或kubeletconfig 。 |
例如,要检查 Ingress 控制器tlsSecurityProfile
字段的所有详细信息
$ oc explain ingresscontroller.spec.tlsSecurityProfile
KIND: IngressController
VERSION: operator.openshift.io/v1
RESOURCE: tlsSecurityProfile <Object>
DESCRIPTION:
...
FIELDS:
custom <>
custom is a user-defined TLS security profile. Be extremely careful using a
custom profile as invalid configurations can be catastrophic. An example
custom profile looks like this:
ciphers: - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 -
ECDHE-RSA-AES128-GCM-SHA256 - ECDHE-ECDSA-AES128-GCM-SHA256 minTLSVersion:
TLSv1.1
intermediate <>
intermediate is a TLS security profile based on:
https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29
and looks like this (yaml):
... (1)
modern <>
modern is a TLS security profile based on:
https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility and
looks like this (yaml):
... (2)
NOTE: Currently unsupported.
old <>
old is a TLS security profile based on:
https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility
and looks like this (yaml):
... (3)
type <string>
...
1 | 此处列出了intermediate 配置文件的密码套件和最低版本。 |
2 | 此处列出了modern 配置文件的密码套件和最低版本。 |
3 | 此处列出了old 配置文件的密码套件和最低版本。 |
要为 Ingress 控制器配置 TLS 安全配置文件,请编辑IngressController
自定义资源 (CR) 以指定预定义或自定义 TLS 安全配置文件。如果未配置 TLS 安全配置文件,则默认值基于为 API 服务器设置的 TLS 安全配置文件。
Old
TLS 安全配置文件的IngressController
CR 示例apiVersion: operator.openshift.io/v1
kind: IngressController
...
spec:
tlsSecurityProfile:
old: {}
type: Old
...
TLS 安全配置文件定义了 Ingress 控制器的 TLS 连接的最小 TLS 版本和 TLS 密码套件。
您可以在IngressController
自定义资源 (CR) 的Status.Tls Profile
下查看已配置的 TLS 安全配置文件的密码套件和最小 TLS 版本,并在Spec.Tls Security Profile
下查看已配置的 TLS 安全配置文件。对于Custom
TLS 安全配置文件,特定密码套件和最小 TLS 版本都列在两个参数下。
HAProxy Ingress 控制器镜像支持 TLS Ingress 运算符还会将 |
您可以作为具有cluster-admin
角色的用户访问集群。
编辑openshift-ingress-operator
项目中的IngressController
CR 以配置 TLS 安全配置文件
$ oc edit IngressController default -n openshift-ingress-operator
添加spec.tlsSecurityProfile
字段
Custom
配置文件的IngressController
CR 示例apiVersion: operator.openshift.io/v1
kind: IngressController
...
spec:
tlsSecurityProfile:
type: Custom (1)
custom: (2)
ciphers: (3)
- ECDHE-ECDSA-CHACHA20-POLY1305
- ECDHE-RSA-CHACHA20-POLY1305
- ECDHE-RSA-AES128-GCM-SHA256
- ECDHE-ECDSA-AES128-GCM-SHA256
minTLSVersion: VersionTLS11
...
1 | 指定 TLS 安全配置文件类型 (Old 、Intermediate 或Custom )。默认为Intermediate 。 |
2 | 为所选类型指定相应的字段
|
3 | 对于custom 类型,请指定 TLS 密码套件列表和最小可接受的 TLS 版本。 |
保存文件以应用更改。
验证配置文件是否已在IngressController
CR 中设置
$ oc describe IngressController default -n openshift-ingress-operator
Name: default
Namespace: openshift-ingress-operator
Labels: <none>
Annotations: <none>
API Version: operator.openshift.io/v1
Kind: IngressController
...
Spec:
...
Tls Security Profile:
Custom:
Ciphers:
ECDHE-ECDSA-CHACHA20-POLY1305
ECDHE-RSA-CHACHA20-POLY1305
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES128-GCM-SHA256
Min TLS Version: VersionTLS11
Type: Custom
...
要为控制平面配置 TLS 安全配置文件,请编辑APIServer
自定义资源 (CR) 以指定预定义或自定义 TLS 安全配置文件。在APIServer
CR 中设置 TLS 安全配置文件会将设置传播到以下控制平面组件
Kubernetes API 服务器
Kubernetes 控制器管理器
Kubernetes 调度器
OpenShift API 服务器
OpenShift OAuth API 服务器
OpenShift OAuth 服务器
etcd
机器配置操作符
机器配置服务器
如果未配置 TLS 安全配置文件,则默认 TLS 安全配置文件为Intermediate
。
Ingress 控制器的默认 TLS 安全配置文件基于为 API 服务器设置的 TLS 安全配置文件。 |
Old
TLS 安全配置文件的APIServer
CR 示例apiVersion: config.openshift.io/v1
kind: APIServer
...
spec:
tlsSecurityProfile:
old: {}
type: Old
...
TLS 安全配置文件定义了与控制平面组件通信所需的最小 TLS 版本和 TLS 密码套件。
您可以在APIServer
自定义资源 (CR) 的Spec.Tls Security Profile
下查看已配置的 TLS 安全配置文件。对于Custom
TLS 安全配置文件,将列出具体的密码套件和最小 TLS 版本。
控制平面不支持 TLS |
您可以作为具有cluster-admin
角色的用户访问集群。
编辑默认APIServer
CR 以配置 TLS 安全配置文件
$ oc edit APIServer cluster
添加spec.tlsSecurityProfile
字段
Custom
配置文件的APIServer
CR 示例apiVersion: config.openshift.io/v1
kind: APIServer
metadata:
name: cluster
spec:
tlsSecurityProfile:
type: Custom (1)
custom: (2)
ciphers: (3)
- ECDHE-ECDSA-CHACHA20-POLY1305
- ECDHE-RSA-CHACHA20-POLY1305
- ECDHE-RSA-AES128-GCM-SHA256
- ECDHE-ECDSA-AES128-GCM-SHA256
minTLSVersion: VersionTLS11
1 | 指定 TLS 安全配置文件类型 (Old 、Intermediate 或Custom )。默认为Intermediate 。 |
2 | 为所选类型指定相应的字段
|
3 | 对于custom 类型,请指定 TLS 密码套件列表和最小可接受的 TLS 版本。 |
保存文件以应用更改。
验证 TLS 安全配置文件是否已在APIServer
CR 中设置
$ oc describe apiserver cluster
Name: cluster
Namespace:
...
API Version: config.openshift.io/v1
Kind: APIServer
...
Spec:
Audit:
Profile: Default
Tls Security Profile:
Custom:
Ciphers:
ECDHE-ECDSA-CHACHA20-POLY1305
ECDHE-RSA-CHACHA20-POLY1305
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES128-GCM-SHA256
Min TLS Version: VersionTLS11
Type: Custom
...
验证 TLS 安全配置文件是否已在etcd
CR 中设置
$ oc describe etcd cluster
Name: cluster
Namespace:
...
API Version: operator.openshift.io/v1
Kind: Etcd
...
Spec:
Log Level: Normal
Management State: Managed
Observed Config:
Serving Info:
Cipher Suites:
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
Min TLS Version: VersionTLS12
...
验证 TLS 安全配置文件是否已在机器配置服务器 Pod 中设置
$ oc logs machine-config-server-5msdv -n openshift-machine-config-operator
# ...
I0905 13:48:36.968688 1 start.go:51] Launching server with tls min version: VersionTLS12 & cipher suites [TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256]
# ...
要在 kubelet 充当 HTTP 服务器时配置其 TLS 安全配置文件,请创建KubeletConfig
自定义资源 (CR) 以为特定节点指定预定义或自定义 TLS 安全配置文件。如果未配置 TLS 安全配置文件,则默认 TLS 安全配置文件为Intermediate
。
kubelet 使用其 HTTP/GRPC 服务器与 Kubernetes API 服务器通信,该服务器向 Pod 发送命令,收集日志,并通过 kubelet 在 Pod 上运行 exec 命令。
Old
TLS 安全配置文件的KubeletConfig
CR 示例apiVersion: config.openshift.io/v1
kind: KubeletConfig
...
spec:
tlsSecurityProfile:
old: {}
type: Old
machineConfigPoolSelector:
matchLabels:
pools.operator.machineconfiguration.openshift.io/worker: ""
#...
您可以在已配置节点上的kubelet.conf
文件中查看已配置 TLS 安全配置文件的密码套件和最小 TLS 版本。
您已以具有cluster-admin
角色的用户身份登录到 OpenShift Container Platform。
创建KubeletConfig
CR 以配置 TLS 安全配置文件
Custom
配置文件的KubeletConfig
CR 示例apiVersion: machineconfiguration.openshift.io/v1
kind: KubeletConfig
metadata:
name: set-kubelet-tls-security-profile
spec:
tlsSecurityProfile:
type: Custom (1)
custom: (2)
ciphers: (3)
- ECDHE-ECDSA-CHACHA20-POLY1305
- ECDHE-RSA-CHACHA20-POLY1305
- ECDHE-RSA-AES128-GCM-SHA256
- ECDHE-ECDSA-AES128-GCM-SHA256
minTLSVersion: VersionTLS11
machineConfigPoolSelector:
matchLabels:
pools.operator.machineconfiguration.openshift.io/worker: "" (4)
#...
1 | 指定 TLS 安全配置文件类型 (Old 、Intermediate 或Custom )。默认为Intermediate 。 |
2 | 为所选类型指定相应的字段
|
3 | 对于custom 类型,请指定 TLS 密码套件列表和最小可接受的 TLS 版本。 |
4 | 可选:为要应用 TLS 安全配置文件的节点指定机器配置池标签。 |
创建KubeletConfig
对象
$ oc create -f <filename>
根据集群中工作节点的数量,等待已配置的节点逐个重启。
要验证配置文件是否已设置,请在节点处于Ready
状态后执行以下步骤
为已配置的节点启动调试会话
$ oc debug node/<node_name>
在调试 shell 中将/host
设置为根目录
sh-4.4# chroot /host
查看kubelet.conf
文件
sh-4.4# cat /etc/kubernetes/kubelet.conf
"kind": "KubeletConfiguration",
"apiVersion": "kubelet.config.k8s.io/v1beta1",
#...
"tlsCipherSuites": [
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"
],
"tlsMinVersion": "VersionTLS12",
#...