3.2. 在 MicroShift 中配置入口控制


您可以通过更新 MicroShift 服务配置文件或使用配置片断来使用详细的入口控制设置。

重要
  • config.yaml 配置文件优先于内置设置。每次 MicroShift 服务启动时都会读取 config.yaml 文件。
  • 配置片断 YAML 优先于内置设置和 config.yaml 配置文件。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 有对集群的 root 访问权限。
  • 集群使用 OVN-Kubernetes Container Network Interface (CNI)插件。

流程

  1. 使用以下两种方式之一应用入口控制设置:

    1. 通过在 /etc/microshift/ 目录中生成提供的 config.yaml.default 文件的副本,将其命名为 config.yaml 并将其保留在源目录中,来更新 MicroShift config.yaml 配置文件。
    2. 使用配置片段应用您想要的 ingress 控制设置。为此,请创建一个配置片断 YAML 文件,并将其放在 /etc/microshift/config.d/ 配置中。
  2. 将 MicroShift YAML 的 ingress 部分中的默认值替换为您的有效值,或将配置片断文件替换为您需要的部分。

    带有默认值的 Ingress 控制器配置字段

    apiServer:
    # ...
    ingress:
      certificateSecret: router-certs-custom
      clientTLS:
        allowedSubjectPatterns: []
        clientCA:
          name: ""
        clientCertificatePolicy: ""
      defaultHTTPVersion: 1
      forwardedHeaderPolicy: Append
      httpCompression:
        mimeTypes:
          - ""
      httpEmptyRequestsPolicy: Respond
      listenAddress: []
      logEmptyRequests: Log
      ports:
         http: 80
         https: 443
      routeAdmissionPolicy:
        namespaceOwnership: InterNamespaceAllowed
        wildcardPolicy: WildcardsDisallowed
      status: Managed
      tlsSecurityProfile:
        type:
        custom:
          ciphers:[]
          minTLSVersion:""
        intermediate: {}
        old: {}
      tuningOptions:
        clientFinTimeout: 1s
        clientTimeout: 30s
        headerBufferBytes: 0
        headerBufferMaxRewriteBytes: 0
        healthCheckInterval: 5s
        maxConnections: 0
        serverFinTimeout: 1s
        serverTimeout: 30s
        threadCount: 4
        tlsInspectDelay: 5s
        tunnelTimeout: 1h
    # ...
    Copy to Clipboard Toggle word wrap

    Expand
    表 3.1. Ingress 控制器配置字段定义表
    参数描述

    ingress

    MicroShift config.yaml 文件的 ingress 部分定义了 OpenShift Container Platform Ingress Control Operator 的实现部分的可配置参数。此表的其余部分中的所有参数都是 config.yamlingress 部分中的子部分。

    certificateSecret

    对包含 MicroShift 入口控制器提供的默认证书的 secret 的 kubernetes.io/tls 类型的引用。当路由没有指定其自身证书时,会使用 certificateSecret 参数。所有使用的 secret 必须包含 tls.key 密钥文件内容和 tls.crt 证书文件内容。

    • 如果没有设置 certificateSecret 参数,则自动生成和使用通配符证书。通配符证书对入口控制器 默认域 及其 子域 有效。生成的证书颁发机构(CA)会自动与集群的信任存储集成。
    • 使用生成和用户指定的证书会自动与 MicroShift 内置 OAuth 服务器集成。

    clientTLS

    验证客户端对集群和服务的访问。因此,启用 mutual TLS 身份验证。如果没有设置,则不启用客户端 TLS。您必须设置 spec.clientTLS.clientCertificatePolicyspec.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 -For,X-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 连接。此字段允许的值是 RespondIgnore。默认值为 Respond。空请求通常来自负载均衡器健康探测或预分配,通常可以忽略。但是,这些请求也可能由网络错误和端口扫描导致。因此,将此字段设置为 Ignore 可妨碍检测或诊断网络问题,并检测入侵尝试。

    • 当策略设置为 Respond 时,入口控制器发送 HTTP 400408 响应,在启用了访问日志时记录连接,并在适当的指标中统计连接。
    • 当策略设置为 Ignore 时,http-ignore-probes 参数将添加到 HAproxy 进程配置中。添加此参数后,ingress 控制器会在不发送响应的情况下关闭连接,然后记录连接或递增指标。

    logEmptyRequests

    指定没有接收和记录请求的连接。logIgnore 是有效的值。空请求通常来自负载均衡器健康探测或预分配,通常可以忽略。但是,这些请求也可能由网络错误和端口扫描导致。因此,将此字段设置为 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 控制器如何处理配置通配符策略的路由。WildcardsAllowedWildcardsDisallowed 是有效的值。默认值为 WildcardsDisallowed

    • WildcardPolicyAllowed 表示入口控制器接受任何通配符策略的路由。
    • WildcardPolicyDisallowed 表示只有带有 None 通配符策略的路由才会被入口控制器接受。
    重要

    将通配符策略从 WildcardsAllowed 更改为 WildcardsDisallowed 会导致接受路由具有 子域的 通配符策略停止工作。这些路由必须重新创建为 None 通配符策略,才能被入口控制器读取。

    status

    默认路由器状态。ManagedRemoved 是有效的值。

    tlsSecurityProfile

    tlsSecurityProfile 指定入口控制器的 TLS 连接的设置。如果没有设置,则默认值基于 apiservers.config.openshift.io/cluster 资源。OldCustom 配置集的 TLS 1.0 版本由入口控制器自动转换为 1.1intermediate 是默认设置。

    • 入口控制器的最低 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,请将值设为 VersionTLS11minTLSVersion 的最高有效值为 VersionTLS12

    tlsSecurityProfile.intermediate

    此 TLS 配置集可用于大多数服务。中间兼容性(推荐)

    tlsSecurityProfile.old

    用于向后兼容。旧的向后兼容性

    tlsSecurityProfile.type

    有效值为 IntermediateOldCustom。不支持 Modern 值。

    tuningOptions

    指定用于调整入口控制器 pod 性能的选项。

    tuningOptions.clientFinTimeout

    指定连接在等待客户端响应关闭连接时保持打开的时长。默认超时为 1s

    tuningOptions.clientTimeout

    指定连接在等待客户端响应时保持打开的时长。默认超时为 30s

    tuningOptions.headerBufferBytes

    为 ingress 控制器连接会话指定保留多少内存(以字节为单位)。如果为 ingress 控制器启用了 HTTP/2,则必须至少为 16384。如果没有设置,则默认值为 32768 字节。

    重要

    不建议设置此字段,因为 headerBufferMaxRewriteBytes 参数值太小可能会破坏入口控制器。相反,headerBufferMaxRewriteBytes 的值太大可能会导致入口控制器使用比必要更多的内存。

    tuningOptions.headerBufferMaxRewriteBytes

    指定在 HTTP 标头重写和附加 ingress 控制器连接会话时,应保留多少内存(以字节为单位)。headerBufferMaxRewriteBytes 的最小值是 4096headerBufferBytes 必须大于传入的 HTTP 请求的 headerBufferMaxRewriteBytes 值。如果没有设置,则默认值为 8192 字节。

    重要

    不建议设置此字段,因为 headerBufferMaxRewriteBytes 值太小可能会破坏入口控制器和 headerBufferMaxRewriteBytes,它们太大可能会导致入口控制器使用比必要更多的内存。

    tuningOptions.healthCheckInterval

    指定路由器在健康检查之间等待的时间(以秒为单位)。默认值为 5s

    tuningOptions.maxConnections

    指定可为每个 HAProxy 进程建立的最大同时连接数。增加这个值可让每个入口控制器 pod 以额外的系统资源成本处理更多连接。允许的值是 0-1、以及范围为 20002000000 内的任何值,或者字段可以留空。

    • 如果此字段为空或者值为 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

  3. 运行以下命令完成任何其他配置,然后启动或重启 MicroShift:

    $ sudo systemctl start microshift
    Copy to Clipboard Toggle word wrap
    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap

验证

在进行 ingress 配置更改并重启 MicroShift 后,您可以检查路由器 Pod 的年龄,以确保应用了更改。

  • 要检查路由器 pod 的状态,请运行以下命令:

    $ oc get pods -n openshift-ingress
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                              READY   STATUS    RESTARTS   AGE
    router-default-8649b5bf65-w29cn   1/1     Running   0          6m10s
    Copy to Clipboard Toggle word wrap

使用这个流程创建由 MicroShift 配置文件中的 certificateSecret 参数值引用的 secret。此 secret 包含由入口控制器提供的默认证书。

注意

任何使用的证书都会自动与 MicroShift 内置 OAuth 服务器集成。

先决条件

  • 有对 MicroShift 的 root 访问权限。
  • 已安装 OpenShift CLI(oc)。
  • 您的私钥没有加密,或者您已解密它以导入到 MicroShift 中。

流程

  1. 创建包含通配符证书链和密钥的 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 Toggle word wrap
    1
    <secret > 是包含证书链和私钥的 secret 名称。
    2
    </path/to/cert.crt> 是证书链在本地文件系统中的路径。
    3
    </path/to/cert.key> 是与此证书关联的私钥的路径。
    重要

    证书必须包含显示 *.apps.<clustername>.<domain>subjectAltName 扩展。

  2. 使用新创建的 secret 更新 MicroShift 配置 YAML 中的 certificateSecret 参数值。
  3. 运行以下命令完成任何其他配置,然后启动或重启 MicroShift:

    $ sudo systemctl start microshift
    Copy to Clipboard Toggle word wrap
    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap

3.2.2. 为入口控制器配置 TLS 安全配置集

您可以通过在 MicroShift 配置 YAML 中设置类型,为 ingress 控制器配置 TLS 安全配置集。

先决条件

  • 有对 MicroShift 集群的 root 访问权限。

流程

  1. 在 MicroShift YAML 配置文件中添加 spec.tlsSecurityProfile 字段。

     ...
    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
     ...
    Copy to Clipboard Toggle word wrap
    1
    指定 TLS 安全配置集类型(OldIntermediateCustom)。默认值为 Intermediate
    2
    为所选类型指定适当的字段:
    • old: {}
    • intermediate: {}
    • custom:
    3
    对于 custom 类型,请指定 TLS 密码列表和最低接受的 TLS 版本。
    警告

    如果您选择 自定义 TLS 配置,请使用非常小心。使用自签名 TLS 证书可能会带来安全风险。

  2. 保存文件以使改变生效。
  3. 运行以下命令重启 MicroShift:

    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat