3.2. 在 MicroShift 中配置入口控制
您可以通过更新 MicroShift 服务配置文件来使用详细的入口控制设置。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 有对集群的 root 访问权限。
- 集群使用 OVN-Kubernetes 网络插件。
流程
使用以下两种方式之一应用入口控制设置:
通过在
/etc/microshift/
目录中生成提供的config.yaml
.defaultconfig.yaml
配置文件。-
创建后,
config.yaml
文件优先于内置设置。每次 MicroShift 服务启动时都会读取配置文件。
-
创建后,
使用配置片段应用您想要的 ingress 控制设置。要做到这一点,创建一个配置片断 YAML 文件,并将其放在
/etc/microshift/config.d/
配置中。-
配置片断 YAML 优先于内置设置和
config.yaml
配置文件。如需更多信息,请参阅附加资源链接。
-
配置片断 YAML 优先于内置设置和
将 MicroShift YAML 的
network
部分中的默认值替换为您的有效值,或将配置片断文件替换为您需要的部分。带有默认值的 Ingress 控制器配置字段
apiServer: # ... ingress: defaultHTTPVersion: 1 forwardedHeaderPolicy: Append httpCompression: mimeTypes: - "" httpEmptyRequestsPolicy: Respond # ... logEmptyRequests: Log # ... tuningOptions: clientFinTimeout: 1s clientTimeout: 30s headerBufferBytes: 0 headerBufferMaxRewriteBytes: 0 healthCheckInterval: 5s maxConnections: 0 serverFinTimeout: 1s serverTimeout: 30s threadCount: 4 tlsInspectDelay: 5s tunnelTimeout: 1h # ...
表 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-Version
HTTP 标头。以下值有效:-
附加
,通过指定入口控制器附加它们来保留任何现有的标头。 -
替换
,通过指定入口控制器设置标头来删除任何现有标头。 -
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 restart microshift
验证
在进行 ingress 配置更改并重启 MicroShift 后,您可以检查路由器 Pod 的年龄,以确保应用了更改。
要检查路由器 pod 的状态,请运行以下命令:
$ oc get pods -n openshift-ingress
输出示例
NAME READY STATUS RESTARTS AGE router-default-8649b5bf65-w29cn 1/1 Running 0 6m10s