3.2. 在 MicroShift 中配置入口控制
您可以通过更新 MicroShift 服务配置文件或使用配置片断来使用详细的入口控制设置。
-
config.yaml
配置文件优先于内置设置。每次 MicroShift 服务启动时都会读取config.yaml
文件。 -
配置片断 YAML 优先于内置设置和
config.yaml
配置文件。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 有对集群的 root 访问权限。
- 集群使用 OVN-Kubernetes Container Network Interface (CNI)插件。
流程
使用以下两种方式之一应用入口控制设置:
-
通过在
/etc/microshift/
目录中生成提供的config.yaml
.defaultconfig.yaml
配置文件。 -
使用配置片段应用您想要的 ingress 控制设置。为此,请创建一个配置片断 YAML 文件,并将其放在
/etc/microshift/config.d/
配置中。
-
通过在
将 MicroShift YAML 的
ingress
部分中的默认值替换为您的有效值,或将配置片断文件替换为您需要的部分。带有默认值的 Ingress 控制器配置字段
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表 3.1. Ingress 控制器配置字段定义表 参数 描述 ingress
MicroShift
config.yaml
文件的ingress
部分定义了 OpenShift Container Platform Ingress Control Operator 的实现部分的可配置参数。此表的其余部分中的所有参数都是config.yaml
的ingress
部分中的子部分。certificateSecret
对包含 MicroShift 入口控制器提供的默认证书的 secret 的
kubernetes.io/tls
类型的引用。当路由没有指定其自身证书时,会使用certificateSecret
参数。所有使用的 secret 必须包含tls.key
密钥文件内容和tls.crt
证书文件内容。-
如果没有设置
certificateSecret
参数,则自动生成和使用通配符证书。通配符证书对入口控制器默认域
及其子域
有效。生成的证书颁发机构(CA)会自动与集群的信任存储集成。 - 使用生成和用户指定的证书会自动与 MicroShift 内置 OAuth 服务器集成。
clientTLS
验证客户端对集群和服务的访问。因此,启用 mutual TLS 身份验证。如果没有设置,则不启用客户端 TLS。您必须设置
spec.clientTLS.clientCertificatePolicy
和spec.clientTLS.ClientCA
参数才能使用客户端 TLS。clientTLS.AllowedSubjectPatterns
可选子字段指定与有效客户端证书上可分辨名称匹配的正则表达式列表,以过滤请求。使用此参数使入口控制器根据可分辨的名称拒绝证书。需要 Perl 兼容正则表达式(PCRE)语法。
重要配置后,此字段必须包含有效的表达式,或者 MicroShift 服务失败。至少一种模式必须与客户端证书的可分辨名称匹配;否则,入口控制器拒绝证书,并拒绝连接。
clientTLS.clientCA
指定
openshift-ingress
命名空间中的所需配置映射。需要此项以启用客户端 TLS。配置映射必须包含名为ca-bundle.pem
的证书颁发机构(CA)捆绑包,或者默认路由器部署失败。clientTLS.ClientCA.name
clientTLS.ClientCA
值中引用的配置映射的metadata.name
。clientTLS.ClientCertificatePolicy
必需
或可选
是有效的值。设置为Required
以启用客户端 TLS。入口控制器只检查边缘终止和重新加密的 TLS 路由的客户端证书。入口控制器无法检查纯文本 HTTP 或 passthrough TLS 路由的证书。defaultHTTPVersion
为入口控制器设置 HTTP 版本。HTTP 1.1 的默认值为
1
。forwardedHeaderPolicy
指定入口控制器何时和如何设置 Forwarded ,
X-
,Forwarded
-ForX-Forwarded-Host
,X-Forwarded-Port
,X-Forwarded-Proto
, 和X-Forwarded-Proto-Version
HTTP 标头。以下值有效:-
Append
通过指定入口控制器附加它们来保留任何现有标头。'append' 是默认值。 -
replace
通过指定入口控制器设置标头来删除任何现有标头。 -
IfNone
通过指定入口控制器设置标头(如果未设置标头)来设置标头。 -
永远不会
通过指定入口控制器来保留任何现有的标头,从而永远不会设置标头。
httpCompression
定义 HTTP 流量压缩的策略。
httpCompression.mimeTypes
定义应将压缩应用到的 MIME 类型列表。
-
例如:
text/css; charset=utf-8
,text/html
,text configured
,image/svg+xml
,application/octet-stream
,X-custom/customsub
, in the,type/subtype; [;attribute=value]
格式。 -
有效
类型包括
:application, image, message, multipart, text, video, 或一个自定义类型,前是X-
。要查看 MIME 类型和子类型的完整表示法,请参阅 RFC1341 (IETF Datatracker 文档)。
httpEmptyRequestsPolicy
描述在收到请求前连接超时时如何处理 HTTP 连接。此字段允许的值是
Respond
和Ignore
。默认值为Respond
。空请求通常来自负载均衡器健康探测或预分配,通常可以忽略。但是,这些请求也可能由网络错误和端口扫描导致。因此,将此字段设置为Ignore
可妨碍检测或诊断网络问题,并检测入侵尝试。-
当策略设置为
Respond
时,入口控制器发送 HTTP400
或408
响应,在启用了访问日志时记录连接,并在适当的指标中统计连接。 -
当策略设置为
Ignore
时,http-ignore-probes
参数将添加到HAproxy
进程配置中。添加此参数后,ingress 控制器会在不发送响应的情况下关闭连接,然后记录连接或递增指标。
logEmptyRequests
指定没有接收和记录请求的连接。
log
和Ignore
是有效的值。空请求通常来自负载均衡器健康探测或预分配,通常可以忽略。但是,这些请求也可能由网络错误和端口扫描导致。因此,将此字段设置为Ignore
可妨碍检测或诊断网络问题,并检测入侵尝试。默认值为Log
。-
将此值设置为
Log
表示应记录事件。 -
将此值设置为
Ignore
会在HAproxy
配置中设置dontlognull
选项。
ports
定义默认路由器端口。
ports.http
默认路由器 http 端口。必须在 1-65535 之间。默认值为
80
。ports.https
默认路由器 https 端口。必须在 1-65535 之间。默认值为
443。
routeAdmission
定义处理新路由声明的策略,如允许或拒绝命名空间之间的声明。
routeAdmission.namespaceOwnership
描述如何处理跨命名空间的主机名声明。默认为
InterNamespaceAllowed
。以下是有效值:-
严格
不允许路由在命名空间间声明相同的主机名。 -
InterNamespaceAllowed
允许路由在命名空间间声明相同主机名的不同路径。
routeAdmission.wildcardPolicy
控制 Ingress 控制器如何处理配置通配符策略的路由。
WildcardsAllowed
和WildcardsDisallowed
是有效的值。默认值为WildcardsDisallowed
。-
WildcardPolicyAllowed
表示入口控制器接受任何通配符策略的路由。 -
WildcardPolicyDisallowed
表示只有带有None
通配符策略的路由才会被入口控制器接受。
重要将通配符策略从
WildcardsAllowed
更改为WildcardsDisallowed
会导致接受路由具有子域的
通配符策略停止工作。这些路由必须重新创建为None
通配符策略,才能被入口控制器读取。status
默认路由器状态。
Managed
或Removed
是有效的值。tlsSecurityProfile
tlsSecurityProfile
指定入口控制器的 TLS 连接的设置。如果没有设置,则默认值基于apiservers.config.openshift.io/cluster
资源。Old
或Custom
配置集的 TLS1.0
版本由入口控制器自动转换为1.1
。intermediate
是默认设置。-
入口控制器的最低 TLS 版本是
1.1
。最大 TLS 版本为1.3。
注意加密器和配置的安全配置集的最小 TLS 版本反映在
TLSProfile
状态中。当开发新的密码且发现现有密码不安全时,配置集会被有意改变。根据特定进程可以使用哪些密码,可以减少可用的列表。tlsSecurityProfile.custom
用户定义的 TLS 安全配置集。如果您配置此参数和相关参数,请使用非常小心。
tlsSecurityProfile.custom.ciphers
指定在 TLS 握手过程中协商的加密算法。Operator 可能会删除其操作对象不支持的条目。
tlsSecurityProfile.custom.minTLSVersion
指定 TLS 握手期间协商的 TLS 协议的最小版本。例如,要使用 TLS 版本 1.1、1.2 和 1.3,请将值设为
VersionTLS11
。minTLSVersion
的最高有效值为VersionTLS12
。tlsSecurityProfile.intermediate
此 TLS 配置集可用于大多数服务。中间兼容性(推荐)
tlsSecurityProfile.old
用于向后兼容。旧的向后兼容性。
tlsSecurityProfile.type
有效值为
Intermediate
、Old
或Custom
。不支持Modern
值。tuningOptions
指定用于调整入口控制器 pod 性能的选项。
tuningOptions.clientFinTimeout
指定连接在等待客户端响应关闭连接时保持打开的时长。默认超时为
1s
。tuningOptions.clientTimeout
指定连接在等待客户端响应时保持打开的时长。默认超时为
30s
。tuningOptions.headerBufferBytes
为 ingress 控制器连接会话指定保留多少内存(以字节为单位)。如果为 ingress 控制器启用了 HTTP/2,则必须至少为
16384
。如果没有设置,则默认值为32768
字节。重要不建议设置此字段,因为
headerBufferMaxRewriteBytes
参数值太小可能会破坏入口控制器。相反,headerBufferMaxRewriteBytes
的值太大可能会导致入口控制器使用比必要更多的内存。tuningOptions.headerBufferMaxRewriteBytes
指定在 HTTP 标头重写和附加 ingress 控制器连接会话时,应保留多少内存(以字节为单位)。
headerBufferMaxRewriteBytes
的最小值是4096
。headerBufferBytes
必须大于传入的 HTTP 请求的headerBufferMaxRewriteBytes
值。如果没有设置,则默认值为8192
字节。重要不建议设置此字段,因为
headerBufferMaxRewriteBytes
值太小可能会破坏入口控制器和headerBufferMaxRewriteBytes
,它们太大可能会导致入口控制器使用比必要更多的内存。tuningOptions.healthCheckInterval
指定路由器在健康检查之间等待的时间(以秒为单位)。默认值为
5s
。tuningOptions.maxConnections
指定可为每个
HAProxy
进程建立的最大同时连接数。增加这个值可让每个入口控制器 pod 以额外的系统资源成本处理更多连接。允许的值是0
、-1
、以及范围为2000
和2000000
内的任何值,或者字段可以留空。-
如果此字段为空或者值为
0,
入口控制器将使用默认值50000
。 -
如果字段的值为
-1
,则HAProxy
进程会根据运行中容器中的可用ulimits
动态计算最大值。与当前默认值50000
相比,此进程会产生大量内存用量。 -
如果字段的值大于当前操作系统限制,则
HAProxy
进程不会启动。 -
如果您选择了一个离散值,并且路由器 pod 迁移到新节点,则新节点可能没有配置相同的
ulimit
。在这种情况下,pod 无法启动。 -
如果您配置了不同的
ulimits
的节点,并且选择了离散值,您可以将-1
的值用于此字段,以便在运行时计算最大连接数。 -
您可以使用
container_memory_working_set_bytes{container="router",namespace="openshift-ingress"}
指标监控路由器容器的内存用量。 -
您可以使用 container_memory_
working_set_bytes{container="router",namespace="openshift-ingress",container_processes{container="router",namespace="openshift-ingress",namespace="openshift-ingress"} 指标来监控路由器
容器中的独立HAProxy
进程。
tuningOptions.serverFinTimeout
指定连接在等待服务器响应关闭连接时保持打开的时长。默认超时为
1s
。tuningOptions.serverTimeout
指定连接在等待服务器响应时保持打开的时长。默认超时为
30s
。tuningOptions.threadCount
指定每个
HAProxy
进程创建的线程数量。创建更多线程可让每个入口控制器 pod 处理更多连接,而代价会增加所使用的系统资源。HAProxy
负载均衡器支持最多64
个线程。如果此字段为空,入口控制器将使用默认值4
个线程。重要不建议设置此字段,因为增加
HAProxy
线程数量允许入口控制器 pod 在负载下使用更多 CPU 时间,并防止其他 pod 接收需要执行的 CPU 资源。减少线程数量可能会导致入口控制器性能不佳。tuningOptions.tlsInspectDelay
指定路由器可以保存数据以查找匹配路由的时长。将此值设置为低时,可能会导致路由器回退到边缘终止、重新加密或透传路由的默认证书,即使在使用更好匹配的证书时也是如此。默认检查延迟为
5s
。tuningOptions.tunnelTimeout
指定隧道连接(包括 websocket)在隧道闲置期间保持打开的时长。默认超时为
1h
。-
如果没有设置
运行以下命令完成任何其他配置,然后启动或重启 MicroShift:
sudo systemctl start microshift
$ sudo systemctl start microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo systemctl restart microshift
$ sudo systemctl restart microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在进行 ingress 配置更改并重启 MicroShift 后,您可以检查路由器 Pod 的年龄,以确保应用了更改。
要检查路由器 pod 的状态,请运行以下命令:
oc get pods -n openshift-ingress
$ oc get pods -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE router-default-8649b5bf65-w29cn 1/1 Running 0 6m10s
NAME READY STATUS RESTARTS AGE router-default-8649b5bf65-w29cn 1/1 Running 0 6m10s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.1. 为 ingress 控制器 certificateSecret 创建 secret 复制链接链接已复制到粘贴板!
使用这个流程创建由 MicroShift 配置文件中的 certificateSecret
参数值引用的 secret。此 secret 包含由入口控制器提供的默认证书。
任何使用的证书都会自动与 MicroShift 内置 OAuth 服务器集成。
先决条件
- 有对 MicroShift 的 root 访问权限。
-
已安装 OpenShift CLI(
oc
)。 - 您的私钥没有加密,或者您已解密它以导入到 MicroShift 中。
流程
创建包含通配符证书链和密钥的 secret :
oc create secret tls <secret>
$ oc create secret tls <secret>
1 --cert=</path/to/cert.crt>
2 --key=</path/to/cert.key>
3 -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要证书必须包含显示
*.apps.<clustername>.<domain>
的subjectAltName
扩展。-
使用新创建的 secret 更新 MicroShift 配置 YAML 中的
certificateSecret
参数值。 运行以下命令完成任何其他配置,然后启动或重启 MicroShift:
sudo systemctl start microshift
$ sudo systemctl start microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo systemctl restart microshift
$ sudo systemctl restart microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2. 为入口控制器配置 TLS 安全配置集 复制链接链接已复制到粘贴板!
您可以通过在 MicroShift 配置 YAML 中设置类型,为 ingress 控制器配置 TLS 安全配置集。
先决条件
- 有对 MicroShift 集群的 root 访问权限。
流程
在 MicroShift YAML 配置文件中添加
spec.tlsSecurityProfile
字段。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存文件以使改变生效。
运行以下命令重启 MicroShift:
sudo systemctl restart microshift
$ sudo systemctl restart microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow