12.4.3.4. 已知使用 Kuryr 安装的限制

将 OpenShift Container Platform 与 Kuryr SDN 搭配使用有一些已知的限制。

RHOSP 常规限制

将 OpenShift Container Platform 与 Kuryr SDN 搭配使用有一些限制,适用于所有版本和环境:

  • 不支持具有 NodePort 类型的 Service 对象。
  • 只有在 Endpoints 对象的 .subsets.addresses 属性中包含节点或 Pod 的子网时,使用 OVN Octavia 供应商驱动程序的集群才支持 .spec.selector 属性未指定的 Service对象。
  • 如果创建机器的子网没有连接到路由器,或者如果子网已连接,但路由器没有设置外部网关,Kuryr 无法为类型为 LoadBalancerService 对象创建浮动 IP。
  • Service 对象上配置 sessionAffinity=ClientIP 属性无效。Kuryr 不支持此设置。
RHOSP 版本限制

使用带有 Kuryr SDN 的 OpenShift Container Platform 有一些限制,具体取决于 RHOSP 版本。

  • RHOSP 16 之前的版本使用默认 Octavia 负载均衡器驱动程序(Amphora)。此驱动要求在每个 OpenShift Container Platform 服务中部署一个 Amphora 负载均衡器虚拟机。创建太多的服务会导致您耗尽资源。

    如果以后版本的 RHOSP 部署中禁用了 OVN Octavia 驱动程序,则也会使用 Amphora 驱动。它们对资源的要求和早期版本 RHOSP 相同。

  • Octavia RHOSP 13.0.13 之前的版本不支持 UDP 侦听程序。因此,OpenShift Container Platform UDP 服务不被支持。
  • Octavia RHOSP 13.0.13 之前的版本无法侦听同一端口上的多个协议。不支持将同一端口暴露给不同协议的服务,比如 TCP 和 UDP。
  • Kuryr SDN 不支持由服务自动取消闲置。
RHOSP 环境限制

使用取决于您的部署环境的 Kuryr SDN 会有一些限制。

由于 Octavia 缺少对 UDP 协议和多个监听器的支持,如果 rhosp 版本早于 13.0.13,Kuryr 会强制 pod 在 DNS 解析中使用 TCP,如果:

在 Go 版本 1.12 及更早的版本中,通过 CGO 支持被禁用的模式编译的应用程序只使用 UDP。在这种情况下,native Go 解析器无法识别 resolv.conf 中的 use-vc 选项,它控制 DNS 解析是否强制使用 TCP。因此,UDP 仍会被用来解析 DNS,这将导致失败。

要确保 TCP 强制使用是允许的,在编译应用程序使把环境变量 CGO_ENABLED 设定为 1(如 CGO_ENABLED=1),或者不使用这个变量。

在 Go 版本 1.13 及之后的版本中,如果使用 UDP 的 DNS 解析失败,则会自动使用 TCP。

注意

基于 musl 的容器,包括基于 Alpine 的容器,不支持 use-vc 选项。

RHOSP 升级限制

作为 RHOSP 升级过程的结果,可能会更改 Octavia API,并可能需要升级到用于负载均衡器的 Amphora 镜像。

您可以单独处理 API 更改。

如果升级了 Amphora 镜像,RHOSP Operator 可使用两种方式处理现有的负载均衡器虚拟机:

如果运算符使用第一个选项,在故障切换过程中可能会有短暂的停机时间。

如果 Operator 采用第二个选项,现有负载均衡器将不支持升级的 Octavia API 功能,比如 UDP 侦听程序。在这种情况下,用户必须重新创建自己的服务以使用这些功能。

重要

如果 OpenShift Container Platform 检测到支持 UDP 负载均衡的新 Octavia 版本,它会自动重新创建 DNS 服务。服务重新创建可确保服务默认支持 UDP 负载均衡。

这个重新创建会导致 DNS 服务大约停机 一 分钟。