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 并将其保留在源目录中,来更新 MicroShiftconfig.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 控制器配置字段定义表 参数 描述 ingressMicroShift
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.nameclientTLS.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-VersionHTTP 标头。以下值有效:-
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是有效的值。tlsSecurityProfiletlsSecurityProfile指定入口控制器的 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 microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow sudo systemctl restart microshift
$ sudo systemctl restart microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在进行 ingress 配置更改并重启 MicroShift 后,您可以检查路由器 Pod 的年龄,以确保应用了更改。
要检查路由器 pod 的状态,请运行以下命令:
oc get pods -n openshift-ingress
$ oc get pods -n openshift-ingressCopy 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 6m10sCopy 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> --cert=</path/to/cert.crt> --key=</path/to/cert.key> -n openshift-ingress$ oc create secret tls <secret>1 --cert=</path/to/cert.crt>2 --key=</path/to/cert.key>3 -n openshift-ingressCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要证书必须包含显示
*.apps.<clustername>.<domain>的subjectAltName扩展。-
使用新创建的 secret 更新 MicroShift 配置 YAML 中的
certificateSecret参数值。 运行以下命令完成任何其他配置,然后启动或重启 MicroShift:
sudo systemctl start microshift
$ sudo systemctl start microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow sudo systemctl restart microshift
$ sudo systemctl restart microshiftCopy 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 microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow