3.10. 验证最大传输单元(MTU)大小


验证最大传输单元(MTU)可防止可能的网络错误配置伪装为 SSL 证书问题。

当数据包大于 HTTP 传输的 MTU 大小时,物理网络路由器可以将数据包分解为多个数据包来传输数据。但是,当数据包大于通过 HTTPS 传输的 MTU 大小时,路由器会被强制丢弃数据包。

安装会生成证书来为多个组件提供安全连接,其中包括:

  • Master 主机
  • 节点主机
  • 基础架构节点
  • registry
  • 路由器

这些证书可以在 master 节点的 /etc/origin/master 目录中找到,而 /etc/origin/node 目录则可用于 infra 和 app 节点。

安装后,您可以使用网络连接部分中介绍的过程验证与 REGISTRY_OPENSHIFT_SERVER_ADDR 的连接。

先决条件
  1. 在 master 主机中获取 HTTPS 地址:

    $ oc -n default get dc docker-registry -o jsonpath='{.spec.template.spec.containers[].env[?(@.name=="REGISTRY_OPENSHIFT_SERVER_ADDR")].value}{"\n"}'
    docker-registry.default.svc:5000

    以上会输出 docker-registry.default.svc:5000

  2. /healthz 附加到上方给出的值,使用它检查所有主机(master、infrastructure、node):

    $ curl -v https://docker-registry.default.svc:5000/healthz
    * About to connect() to docker-registry.default.svc port 5000 (#0)
    *   Trying 172.30.11.171...
    * Connected to docker-registry.default.svc (172.30.11.171) port 5000 (#0)
    * Initializing NSS with certpath: sql:/etc/pki/nssdb
    *   CAfile: /etc/pki/tls/certs/ca-bundle.crt
      CApath: none
    * SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    * Server certificate:
    * 	subject: CN=172.30.11.171
    * 	start date: Oct 18 05:30:10 2017 GMT
    * 	expire date: Oct 18 05:30:11 2019 GMT
    * 	common name: 172.30.11.171
    * 	issuer: CN=openshift-signer@1508303629
    > GET /healthz HTTP/1.1
    > User-Agent: curl/7.29.0
    > Host: docker-registry.default.svc:5000
    > Accept: */*
    >
    < HTTP/1.1 200 OK
    < Cache-Control: no-cache
    < Date: Tue, 24 Oct 2017 19:42:35 GMT
    < Content-Length: 0
    < Content-Type: text/plain; charset=utf-8
    <
    * Connection #0 to host docker-registry.default.svc left intact

    上例输出中显示了用来确保 SSL 连接正确使用的 MTU 大小。尝试连接成功,然后建立连接并完成后,使用 certpath 初始化 NSS 以及有关 docker-registry 的所有服务器证书信息即可完成。

    不正确的 MTU 大小会导致超时:

    $ curl -v https://docker-registry.default.svc:5000/healthz
    * About to connect() to docker-registry.default.svc port 5000 (#0)
    *   Trying 172.30.11.171...
    * Connected to docker-registry.default.svc (172.30.11.171) port 5000 (#0)
    * Initializing NSS with certpath: sql:/etc/pki/nssdb

    上例显示连接已建立,但无法完成使用 certpath 初始化 NSS。这个问题与在相关的节点配置映射中不正确的 MTU 大小相关。

    要解决这个问题,将节点配置映射中的 MTU 大小调整为比 OpenShift SDN 以太网设备使用的 MTU 大小小 50 字节。

  3. 查看所需以太网设备的 MTU 大小(例如 eth0):

    $ ip link show eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
        link/ether fa:16:3e:92:6a:86 brd ff:ff:ff:ff:ff:ff

    以上显示了 MTU 设置为 1500。

  4. 要更改 MTU 大小,请修改适当的节点 配置映射 并设置比 ip 命令提供的输出小 50 字节的值。

    例如,如果 MTU 大小被设置为 1500,在节点配置映射中将 MTU 大小调整为 1450:

    networkConfig:
       mtu: 1450
  5. 保存更改并重启节点:

    注意

    您必须在所有 master 和作为 OpenShift Container Platform SDN 一部分的节点上更改 MTU 大小。另外,tun0 接口的 MTU 大小必须在属于集群的所有节点中相同。

  6. 一旦节点恢复在线后,通过重新运行原始 curl 命令来确认问题已不存在。

    $ curl -v https://docker-registry.default.svc:5000/healthz

    如果仍然有超时问题,请继续以 50 字节的增量调整 MTU 大小,然后重复该过程。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.