3.2. 在 MicroShift 中配置入口控制
您可以通过更新 MicroShift 服务配置文件来使用详细的入口控制设置。
先决条件
-
已安装 OpenShift CLI(
oc)。 - 有对集群的 root 访问权限。
- 集群使用 OVN-Kubernetes 网络插件。
流程
使用以下两种方式之一应用入口控制设置:
通过在
/etc/microshift/目录中生成提供的文件的副本,将其命名为 config.yaml 并将其保留在源目录中,来更新 MicroShiftconfig.yaml.defaultconfig.yaml配置文件。-
创建后,
config.yaml文件优先于内置设置。每次 MicroShift 服务启动时都会读取配置文件。
-
创建后,
使用配置片段应用您想要的 ingress 控制设置。要做到这一点,创建一个配置片断 YAML 文件,并将其放在
/etc/microshift/config.d/配置中。-
配置片断 YAML 优先于内置设置和
config.yaml配置文件。如需更多信息,请参阅附加资源链接。
-
配置片断 YAML 优先于内置设置和
将 MicroShift YAML 的
network部分中的默认值替换为您的有效值,或将配置片断文件替换为您需要的部分。带有默认值的 Ingress 控制器配置字段
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表 3.1. Ingress 控制器配置字段定义表 参数 描述 defaultHTTPVersion为入口控制器设置 HTTP 版本。HTTP 1.1 的默认值为
1。forwardedHeaderPolicy指定入口控制器何时和如何设置 Forwarded ,
X-,Forwarded-ForX-Forwarded-Host,X-Forwarded-Port,X-Forwarded-Proto, 和X-Forwarded-Proto-VersionHTTP 标头。以下值有效:-
附加,通过指定入口控制器附加它们来保留任何现有的标头。 -
替换,通过指定入口控制器设置标头来删除任何现有标头。 -
IfNone通过指定入口控制器设置标头(如果未设置标头)来设置标头。 -
永不,通过指定 ingress 控制器永远不会设置标头来保留任何现有的标头。
httpCompression定义 HTTP 流量压缩的策略。
-
httpCompression.mimeTypes定义压缩应用到的单个 MIME 类型列表。例如,text/css; charset=utf-8,text/html,text/*,image/svg+xml,application/octet-stream,X-custom/customsub,格式为type/subtype; [;attribute=value]。类型包括:application, image, message, multipart, text, video, 或一个自定义类型,前是X-。要查看 MIME 类型和子类型的完整表示法,请参阅 RFC1341 (IETF Datatracker 文档)。
httpEmptyRequestsPolicy描述在收到请求前连接超时时如何处理 HTTP 连接。此字段允许的值是
Respond和Ignore。默认值为Respond。以下是有效值:-
响应,会导致入口控制器发送 HTTP400或408响应,在启用了访问日志时记录连接,并在适当的指标中统计连接。 -
忽略,在HAproxy配置中添加http-ignore-probes参数。如果字段设置为Ignore,则入口控制器在不发送响应的情况下关闭连接,然后记录连接或递增指标。
通常,空请求连接来自负载均衡器健康探测或 Web 浏览器预先连接,可以安全地忽略。但是,网络错误和端口扫描也可以创建这些空请求,因此将此字段设置为
Ignore可能会妨碍检测或诊断问题,并妨碍入侵尝试检测。logEmptyRequests指定没有接收和记录请求的连接。通常,这些空请求来自负载均衡器健康探测或 Web 浏览器规范连接,如 preconnects。记录这些类型的空请求是不正常的。但是,网络错误和端口扫描也可以创建空请求,因此将此字段设置为
Ignore可能会妨碍检测或诊断问题,并妨碍入侵尝试检测。以下是有效值:
-
日志,表示应记录事件。 -
忽略,该选项在HAproxy配置中设置dontlognull选项。
tuningOptions指定用于调整入口控制器 pod 性能的选项。
-
tuningOptions.clientFinTimeout参数指定连接在等待客户端响应关闭连接时保持打开的时长。默认超时为1s。 -
tuningOptions.clientTimeout参数指定连接在等待客户端响应时保持打开的时长。默认超时为30s。 tuningOptions.headerBufferBytes参数指定为 Ingress Controller 连接会话保留多少内存(以字节为单位)。如果为 Ingress Controller 启用了 HTTP/2,则必须至少为16384。如果没有设置,则默认值为32768字节。重要不建议设置此字段,因为
headerBufferMaxRewriteBytes参数值太小可能会破坏入口控制器。相反,headerBufferMaxRewriteBytes的值太大可能会导致入口控制器使用比必要更多的内存。-
tuningOptions.headerBufferMaxRewriteBytes参数指定从headerBufferBytes为 HTTP 标头重写和附加 Ingress Controller 连接会话应保留多少内存(以字节为单位)。headerBufferMaxRewriteBytes的最小值是4096。headerBufferBytes值必须大于传入的 HTTP 请求的headerBufferMaxRewriteBytes值。 如果没有设置,则默认值为
8192字节。重要不建议设置此字段,因为
headerBufferMaxRewriteBytes参数值太小可能会破坏入口控制器。相反,headerBufferMaxRewriteBytes的值太大可能会导致入口控制器使用比必要更多的内存。-
tuningOptions.healthCheckInterval参数指定路由器在健康检查之间等待的时间。默认值为5s。 -
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