3.10. 验证最大传输单元(MTU)大小
验证最大传输单元(MTU)可防止可能的网络错误配置伪装为 SSL 证书问题。
当数据包大于 HTTP 传输的 MTU 大小时,物理网络路由器可以将数据包分解为多个数据包来传输数据。但是,当数据包大于通过 HTTPS 传输的 MTU 大小时,路由器会被强制丢弃数据包。
安装会生成证书来为多个组件提供安全连接,其中包括:
- Master 主机
- 节点主机
- 基础架构节点
- registry
- 路由器
这些证书可以在 master 节点的 /etc/origin/master
目录中找到,而 /etc/origin/node
目录则可用于 infra 和 app 节点。
安装后,您可以使用网络连接部分中介绍的过程验证与 REGISTRY_OPENSHIFT_SERVER_ADDR
的连接。
先决条件
在 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
。将
/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 字节。
查看所需以太网设备的 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。
要更改 MTU 大小,请修改适当的节点 配置映射 并设置比
ip
命令提供的输出小 50 字节的值。例如,如果 MTU 大小被设置为 1500,在节点配置映射中将 MTU 大小调整为 1450:
networkConfig: mtu: 1450
保存更改并重启节点:
注意您必须在所有 master 和作为 OpenShift Container Platform SDN 一部分的节点上更改 MTU 大小。另外,tun0 接口的 MTU 大小必须在属于集群的所有节点中相同。
一旦节点恢复在线后,通过重新运行原始
curl
命令来确认问题已不存在。$ curl -v https://docker-registry.default.svc:5000/healthz
如果仍然有超时问题,请继续以 50 字节的增量调整 MTU 大小,然后重复该过程。