1.4. 程序错误修复

身份验证

  • Authentication Operator 报告使用静态的 "available" 字符串作为不可用条件的原因,这个信息并不明确。此程序错误修复给出了更明确的不可用条件的原因,因此更容易找出造成 Operator 不可用的原因。(BZ#1740357)
  • oauth-proxy 进程为每个请求重新载入 CA 证书,并存储在内存中。这会造成高内存消耗导致 oauth-proxy 容器被终止运行。在这个版本中,CA 证书会被缓存,除非它们有变化。因此,在有多个针对它的请求时,oauth-proxy 进程的内存消耗会显著下降。(BZ#1759169)
  • 在以前的版本中,在使用 OAuth 服务器的 TLS 握手期间,为 RequestHeader 身份提供程序 (IdP) 配置的客户端 CA 证书不会在其它证书中声明。当 login-proxies 尝试连接到 OAuth 服务器时,它们将不会使用其客户端证书,从而导致其请求未经身份验证,从而导致 IdP 的用户无法登录到集群。此程序错误修复在 TLS 配置的其余部分中添加了配置的客户端 CA,因此,使用 RequestHeader IdP 的身份验证可以正常工作。(BZ#1764558)
  • OpenShift Container Platform 4.1 中引入的 bootstrap 用户内部使得 CLI 日志流始终可用。如果只配置了 web 控制台流,当从 CLI 进行登陆时,有关如何获取验证令牌的信息将不会被显示。这些信息在 OCP 3.x 中会显示。在这个版本中,当用户禁用 bootstrap 用户身份提供程序 (IdP) 时,它不会再被配置。因此,在按照 OCP 文档中的步骤禁用 bootstrap IdP 后,现在当只配置了 web 时仍会显示有关如何获取身份验证令牌的信息。(BZ#1781083)
  • 在以前的版本中,到 oauth-server 的路由不会响应 Ingress 域的更改,这会影响到 Authentication Operator,并导致 oauth-server 无法正确验证。现在,当检测到 Ingress 域更改时,oauth-server 路由会做出相应的更新,从而使身份验证可以正常进行。(BZ#1707905)

Builds

  • 在一个镜像流被创建后很快启动的构建可能不会利用指定的本地 pullthrough 镜像流标签。构建尝试从外部镜像 registry 拉取镜像,如果构建没有使用该 registry 所需的授权和证书设置,构建将失败。现在构建控制器已被更新,当检测到其镜像流缓存不包括所需的信息时,允许利用本地的 pullthrough 镜像流标签并通过其他方法检索这些信息。构建过程现在可以成功利用本地镜像流标签 pullthrough。(BZ#1753731)
  • 在以前的版本中,构建控制器有时会错误地认为一个构建是由构建配置端点实例化的,而实际上构建是由构建端点实例化的。因此,当用户直接实例化 OpenShift 构建,而不是通过向构建配置 API 端点启动一个构建请求时,构建控制器日志中会出现不存在的构建配置信息,这个日志信息可能会造成混淆。现在构建控制器已被更新,它可以更好地检查构建是否从构建配置端点实例化,从而避免了在日志中记录不必要的错误信息。构建控制器日志已不再出现上面提到的易混淆的错误消息。(BZ#1767218), (BZ#1767219)

Cluster Version Operator

  • 在以前的版本中,更新协议 Cincinnati(为利用自动更新而设计)使用标签(tag)来指代实际数据。当在不同点应用同一图形的同一版本时,可能会产生不同的结果。现在,如果容器 registry 提供了 manifestref,则会使用镜像 SHA 来指代实际数据。这保证了集群会使用特定的发行版本。(BZ#1686589)

控制台 Kubevirt 插件

  • 在以前的版本中,指定的 volumeMode 没有被传递给新创建的磁盘,因此 PVC 可能无法正确绑定。现在,volumeMode 可以被正确传递给新创建的磁盘。(BZ#1753688)
  • 在以前的版本中,当通过 URL 直接访问时,虚拟机详情页面不会被正确加载。现在,该页面可以被正确加载。(BZ#1731480)
  • 在以前的版本中,kubevirt-storage-class-defaults ConfigMap 设置没有正确地反映 VMware VM 的导入。因此,blockMode PVC 不能用于 VMware VM 导入。现在,在请求 VMware 导入磁盘时,存储类默认会被正确使用。(BZ#1762217)
  • 在以前的版本中,Import VM 向导的标题不正确,可能会导致混淆。现在,这个向导的标题已被改为 Import Virtual Machine。(BZ#1768442)
  • 在以前的版本中,VM 迁移向导中的存储和网络配置确认按钮位于错误的地方。现在,这些确认按钮位于正确的位置。(BZ#1778783)
  • 在以前的版本中,创建虚拟机 向导不会在创建虚拟机前提示确认,这意味着用户可能会意外地创建一个虚拟机。在这个版本中,在创建虚拟机前,用户必须在复查页面中点击 "Create Virtual Machine" 。(BZ#1674407)
  • 在以前的版本中,Create Virtual Machine 向导在导入 VM 时需要输入的字段不太直观。Create Virtual Machine 向导现已被重新设计,以按预期工作。(BZ#1710939)
  • 在以前的版本中,验证虚拟机名称的出错信息不明确。这些出错信息已被改进以提供更准确的描述。(BZ#1743938)

容器

  • 在以前的版本中,当进行一个回复操作时,CRI-O 没有正确过滤 Podman 容器。因为在开始时,Podman 容器没有特定于 CRI-O 的元数据,所以 CRI-O 会将 Podman 容器认为是错误创建的 CRI-O 容器。因此,它会要求存储库删除容器。现在,在 CRI-O 恢复过程中可以正确地过滤 Podman 容器,它们在启动时不再会被从存储中删除。(BZ#1758500)

Etcd

  • etcd 会因为大量对象造成超载,从而导致在 etcd 失败时集群停止工作。现在,etcd 客户端均衡器会在客户端连接超时进行端点故障切换。(BZ#1706103)
  • etcd 在升级过程中会失败,并导致灾难恢复补救步骤。现在,已更新 etcd 来解决 gRPC 软件包问题,以防止出现灾难性的集群失败。(BZ#1733594)

镜像 Registry

  • 在更改了镜像 registry Operator 配置中的存储类型后,旧的和新的存储类型都会出现在 Operator 的状态中。由于此行为,在删除其配置后,镜像 registry Operator 不会被删除。现在只显示新存储类型,因此在更改镜像使用的存储类型后,镜像 registry Operator 会被删除。BZ#1722878)
  • 由于旧镜像流可能具有无效的名称,因此当镜像流标签的 spec 无效时镜像修剪操作会失败。现在,镜像修剪程序总会修剪镜像,即使关联的镜像流具有无效名称。BZ#1749256)
  • 当镜像 registry Operator 的管理状态为 Removed时,它不会报告自己为 Available 状态或正确版本号。由于这个问题,当镜像 registry Operator 被设置为 Removed时,升级会失败。现在,当将镜像 registry Operator 的状态设置为 Removed时,它会报告自己为 Available 状态,并报告正确的版本。即使从集群中移除了镜像 registry,您也可以完成升级。(BZ#1753778)
  • 在以前的版本中,可以使用无效的 Azure 容器名称配置镜像 registry Operator,因为名称无效,镜像 registry 将不会部署到 Azure 上。现在,镜像 registry Operator 的 API 模式可确保您输入的 Azure 容器名称符合 Azure API 的要求且有效,从而确保 Operator 可以部署。(BZ#1750675)

kube-apiserver

  • 在以前的版本中,会为以下每个控制器创建一个不需要的服务监控对象: kube-apiserver 、kube-controller-manager 和 kube-scheduler。现在,不需要的服务监控对象不再会被创建。(BZ#1735509)
  • 在以前的版本中,当因为启用了技术预览功能或自定义功能而使集群处于不可升级状态时,不会发送警报。现在,如果在处于不可升级状态的集群中尝试升级时,集群会通过 Prometheus 发送一个 TechPreviewNoUpgrade 警报。(BZ#1731228)

kube-controller-manager

  • 在以前的版本中,在定义 StatefulSet 资源对象时,通过 volumeClaimTemplates 参数指定的模板创建 PersistentVolumeClaim 资源对象时,不会应用自定义标签。现在,自定义标签可以正确地应用到通过 StatefulSet 资源定义的 volumeClaimTemplates 对象创建的 PersistentVolumeClaim 对象。(BZ#1753467)
  • 在以前的版本中,如果删除了 Kubernetes Controller Manager (KCM) 的租期 ConfigMap,KCM 便没有权限重新创建 ConfigMap,且无法这样做。现在,如果已删除,KCM 可以重新创建租期 ConfigMap。(BZ#1780843)

日志记录

  • 在以前的版本中,集群版本和 ClusterLogging 版本之间的不匹配会导致 ClusterLogging 无法部署。现在,kubeversion 会被确认支持部署的 ClusterLogging 版本。(BZ#1765261)
  • 在以前的版本中,日志中关于工具值的数据没有被隔离,其值不正确,从而导致 fluentd 在错误的级别上释放错误信息。现在,在 debug 级别上 luentd 的日志被正确记录。(BZ#1753936,BZ#1766187)
  • 在以前的版本中,oauth-proxy 被错误配置,用户无法在登出后再登录。现在,重新配置了 oauth-proxy,用户可以在登出后再重新登录。(BZ#1725517)
  • 在以前的版本中,Eventrouter 无法处理未知事件类型,这会导致 Eventrouter 崩溃。现在,Eventrouter 可以正确处理未知事件类型。(BZ#1753568)

管理控制台

  • 在以前的版本中,Management Console 面板详情页不必要地监视基础架构资源。因此,可能会出现有关早期 web 套接字连接终止的错误。现在,详情页不会监视基础架构资源,仅获取资源数据一次。在应用此程序修复后不会再报告错误。(BZ#1765083)
  • 在以前的版本中,在路由器有机会提供主机名前,控制台 Operator 将控制台 URL 记录为初始的空字符串值。现在,Operator 会进行等待直到主机名被填充,从而不会出现空字符串的问题。(BZ#1768684)

Metering Operator

  • 在以前的版本中,metering-operator CSV 中的 containerImage 项引用了一个镜像标签,该标签没有列在 ART 用于替换目的的 image-references 文件中。这意味着 ART 无法将 containerImage 字段中列出的原始镜像正确替换为关联的 image-registry 存储仓库和 sha256 标签。在这个版本中,镜像标签 latestimage-references 文件中定义的 release-4.3 替换。因此,ART 现在可以成功替换 metering-operator 容器镜像。(BZ#1782237)
  • 在以前的版本中,Hadoop Dockerfile.rhelgcs-connector JAR 文件复制到容器的错误位置。现在,路径已被修正,指向正确的位置。(BZ#1767629)

网络

  • 在以前的版本中,在修改 CNO 时不会删除所有相关对象,这会留下过时的网络附加定义。在 OpenShift Container Platform 4.3 中,已重构了代码,以更通用的方式进行此操作,以便正确清理相关的对象。(BZ#1755586)
  • 在以前的版本中,一些更新被丢弃,造成事件丢失。现在,不再会丢弃事件。(BZ#1747532)
  • 在以前的版本中,当具有带有数据包丢失的大量网络数据的集群中,已成功连接到服务的连接可能会出现 Connection reset by peer 错误。因此,客户端需要重新连接并重新传输数据。现在,已更新了 iptables 规则以便正确处理 TCP 重新传输。已建立的连接将会保持打开,直到关闭为止。(BZ#1762298)
  • 在以前的版本中,NetworkPolicy 在具有多个命名空间、命名空间更改以及选择命名空间的 NetworkPolicies 的集群中,对新命名空间的应用可能会慢慢。新的命名空间可能需要等待大量时间才可以被其他命名空间访问。现在,Namespace 和 NetworkPolicy 的代码已更新,NetworkPolicies 会马上应用到新的命名空间。(BZ#1752636)
  • 在以前的版本中,SDN Pod 在重启节点时不会清理 Egress IP 地址,从而导致 IP 地址冲突。现在,SDN pod 会在启动时清除过时的 Egress IP 地址,以防止发生冲突。(链接: BZ#1753216
  • 在以前的版本中,每次在 EgressNetworkPolicy 中查询 DNS 名称时都会查询 DNS 名称。无论前面的查询是否刷新了特定的 DNS 记录,都会查询记录,从而降低网络性能。现在,DNS 记录根据唯一的名称而不是每个 EgressNetworkPolicy 进行查询。因此,DNS 查询性能显著提高。(BZ#1684079)
  • 在以前的版本中,控制台无法在多个服务端点间创建路由。现在,GUI 已被更新,可以添加或删除三个替代服务端点。(BZ#1725006)

节点

  • 在以前的版本中,当容器具有高(或 > 1)的重启数时,kubelet 会将重复的容器指标数据注入 metrics 流,从而导致 kubelet 上的 /metrics 端点抛出一个 500 错误。在这个版本中,仅包含大多数当前容器(运行或停止)的指标。因此,/metrics 端点现在允许指标流到 Prometheus,而不会造成 500 错误。(BZ#1779285)
  • 对长路径名测试进行了上游更改。以前,名称大于 255 个字符的 Pod 没有被记录,且不会发出警告。现在,名称长度超过 255 个字符的 Pod 会如预期在日志中被记录。(BZ#1711544)
  • 在以前的版本中,LocalStorageCapacityIsolation 功能被禁用,用户无法使用 Statefulset.emptyDir.sizeLimit 参数。现在,LocalStorageCapacityIsolation 功能已被启用,并且可以设置 Statefulset.emptyDir.sizeLimit 参数。(BZ#1758434)

oc

  • 在以前的版本中,使用服务器端打印时,在监视时会忽略 wide 输出选项(oc get clusteroperators -o wide)。现在,在使用服务器端打印时,可以正确地识别所有可能的选项。(BZ#1685189)
  • oc explain 命令到上游文档的链接过期。这些链接已经更新,现在有效。(BZ#1727781)
  • 完整用法菜单信息会和错误标志错误信息一起输出,导致错误信息被忽略。现在,当运行 oc command --help 时,标志错误是唯一显示的信息。(BZ#1748777)
  • 因为缺少状态代码信息,oc status 命令没有以一致的格式显示 DaemonSet。现在,在 oc status 命令的输出中会正确输出 Daemonset 、Deployment 和 Deployment Configuration。(BZ#1540560)
  • 因为设置了不正确的标记, oc versionoopenshift-install version 会显示为 Dirty。这些标志已经更新,命令将不再显示 Dirty GitTreeStateGitVersion。(BZ#1715001)
  • oc status 命令建议 oc set probe pod 验证 pod 仍在运行,包括控制器可能拥有的 pod。现在,探测建议会忽略控制器拥有的 pod。(BZ#1712697)
  • 在以前的版本中,oc new-build help 命令没有正确过滤标志。这会导致在调用 oc new-build --help时打印不相关的标志。这已被解决,现在 help 命令只输出相关的信息。(BZ#1737392)

openshift-apiserver

  • 4.2 和 4.3 中的 ClusterResourceQuota 不允许使用非字符串作为限制值,因为 OpenAPI 模式错误。因此,虽然之前在 4.1 中可能这样做,但无法在 ClusterResourceQuota 对象中设置整数配额值。ClusterResourceQuota 的 OpenAPI 模式已被修复,它允许整数,从而可以在 ClusterResourceQuota 中再次使用整数作为配额值。(BZ#1756417)
  • 在升级过程中,openshift-apiserver 会报告 degraded。造成降级的原因为 MultipleAvailable,但这对于用户无法理解。现在,这个程序错误修复会列出造成降级的原因,因此不会向用户隐藏任何信息。(BZ#1767156)

Web 控制台

  • 如果安装了 knative serverless TP1 Operator 且以非 admin 用户身份登录,控制台工作负载会显示一个限制的访问错误。在这个版本中,对于普通的部署或特定于 knative 的部署,Overview 侧边栏资源都可以正常工作。非管理员用户现在可以查看工作负载。(BZ#1758628)
  • 拓扑视图数据模型最初是项目 Workloads 页的一个子集。当 Workloads 页增加了新的功能时,虽然拓扑视图会以相似的形式进行改变,但它们并没有共享相同的代码。随着用例变得复杂,新的代码可能会忽略掉一些边缘用例。在某些情况下,拓扑视图中的 Pod 列表不正确。在这个版本中,拓扑视图和项目 Workloads 页共享了相同的代码逻辑。因此,现在无论从拓扑视图还是项目 Workloads 页中查看 Pod 列表,Pod 详情信息都是相同的。(BZ#1760827)
  • 在以前的版本中,当创建 Route 对象时,会设置可用端口列表中的第一个端口,而不是设置在目标端口下拉菜单中选则的端口。因此,用户无法选择所需的目标端口。现在,在创建 Route 对象时,目标端口下拉菜单中选择的端口会被设置。如果没有选择端口,则设置列表里的第一个端口。(BZ#1760836)
  • 在以前的版本中,对于 Edge 浏览器中,Topology 视图中无法呈现某些特征,如应用程序名称和构建状态。在这个版本中,Edge 浏览器会正常显示应用程序名称和构建状态。(BZ#1760858)
  • 以前,当安装了 Knative Operator 时,一个非 admin 用户无法在 web 控制台的 Overview 页中查看工作负载,即使选择了非 Knative 工作负载的部署。在这个版本中增加了一个是否有相关配置的检查,如果没有相关的配置,系统就不会在 Overview 页中添加特定于 Knative 的资源。这可让非 admin 用户按预期查看工作负载。(BZ#1760810)
  • 在以前的版本中,当 Topology 上下文菜单打开时,相关的节点不容易被识别。这会给用户造成混乱,因为用户不知道上下文菜单指向的节点。现在,当右键单击节点以打开上下文菜单时,一个明显的鼠标光标或影子会出现在节点上以便更容易地识别。(BZ#1776401)
  • 在以前的版本中,web 控制台中的 Import from Git 表单使用的用来验证 Git URL 的正则表达式太严格,从而使一些有效的 URL 无法通过验证。现在,正则表达式已被更新,可以接受所有有效的 Git URL。(BZ#1766350), (BZ#1771851)
  • 开发人员控制台的错误消息被重复。这个系统已经更新,以正确反映客户端里的值。现在,错误消息非常简洁清晰。(BZ#1688613)
  • 在以前的版本中,当访问 OLM 操作数资源的 Resources 标签卡时,web 控制台可能会出现运行时错误。当尝试为 OLM 操作资源排序 Resources 选项卡时,web 控制台也可能会停滞。现在这个问题已解决。(BZ#1756319)
  • 在以前的版本中,当使用 Microsoft Edge 访问 OpenShift web 控制台的 pod 详情页面时,可能会导致运行时错误,从而无法显示该页面。这个问题现已解决,pod 详情页面现在可以正确显示。(BZ#1768654)
  • 在以前的版本中,如果一个 dashboard card 监视了 Prometheus 结果,则 dashboard 页面的性能会因为旧警报和新警报的比较不正确而降低。现在,这个问题已解决。(BZ#1781053)
  • 在以前的版本中,Network Policy 页面中的文档链接不正确。现在,这些文档链接已被修正。(BZ#1692227)
  • 在以前的版本中,Prometheus 查询包含一个范围选择器,它会阻止 Prometheus UI 的默认页面上的图表正确显示。现在,查询已不再包含范围选择器,因此查询现在可以正确运行。(BZ#1746979)
  • Recycle 是持久性卷重新声明策略的默认值,即使该选项已弃用。默认情况下,持久性卷包含了已弃用的值。现在,默认的 Persistent Volume Reclaim 策略已被改为 Retain,因此新的持久性卷不包含已弃用的值。(BZ#1751647)
  • 在以前的版本中,在升级集群后,web 控制台可以使用缓存的 CSS 风格表,这可能会导致加载控制台时出现一些问题。这个问题已被解决,网页控制台现在在升级后使用了正确的风格表。(BZ#1772687)
  • 在以前的版本中,当在一些情况下在选项菜单中使用 web 控制台时,页面里的其他元素被隐藏。现在,选项菜单不再出现在其他页面元素后面,并可根据需要在页中正确地展开,以确保整个菜单始终可见。(BZ#1723254)
  • 以前,长节点名称可能会使 OpenShift 控制台 Pod 表中的表字段溢出。在这个版本中,它们可以被正确地换行。(BZ#1713193)
  • 在以前的版本中,使用 YAML 示例创建报告查询会导致错误。现在,为报告查询添加了一个新的 YAML 示例,该查询包含所有必填字段,因此不会发生错误。(BZ#1753124)
  • 在之前的 Install Plan Details 页面中,相关目录源的命名空间被错误地设置。这会导致链接无法正常工作,因为命名空间不存在。此程序错误修复使用 InstallPlan 资源的 status.plan 字段将目录源与正确的命名空间关联。因此,目录源链接可以正常工作。(BZ#1767072)
  • 在以前的版本中,未知的自定义资源会被自动分成单词来估计用户应该看到的内容。然而,有些资源被不正确地分割。在这个版本中,自定义资源使用自定义资源定义中定义的名称,而不是将其分隔为不同的单词。(BZ#1722811