本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

故障排除 SUSE Rancher Prime Kubernetes 集群中的 服务器

本节描述了如何在 Kubernetes 集群上故障排除 Rancher 的安装。

相关名称空间

大多数故障排除将在这 3 个名称空间中的对象上进行。

  • cattle-system - rancher 部署和 pods。

  • traefik - Ingress 控制器 pods 和服务。

  • cert-manager - cert-manager pods。

"默认后端 - 404"

多种原因可能导致 ingress-controller 无法将流量转发到您的 Rancher 实例。大多数情况下,这是由于 SSL 配置错误。

需要检查的事项

检查 Rancher 是否正在运行

使用 kubectl 检查 cattle-system 系统名称空间,查看 Rancher pods 是否处于运行状态。

kubectl -n cattle-system get pods

NAME                           READY     STATUS    RESTARTS   AGE
pod/rancher-784d94f59b-vgqzh   1/1       Running   0          10m

如果状态不是 Running,请在 pod 上运行 describe 并检查事件。

kubectl -n cattle-system describe pod

...
Events:
  Type     Reason                 Age   From                Message
  ----     ------                 ----  ----                -------
  Normal   Scheduled              11m   default-scheduler   Successfully assigned rancher-784d94f59b-vgqzh to localhost
  Normal   SuccessfulMountVolume  11m   kubelet, localhost  MountVolume.SetUp succeeded for volume "rancher-token-dj4mt"
  Normal   Pulling                11m   kubelet, localhost  pulling image "rancher/rancher:v2.0.4"
  Normal   Pulled                 11m   kubelet, localhost  Successfully pulled image "rancher/rancher:v2.0.4"
  Normal   Created                11m   kubelet, localhost  Created container
  Normal   Started                11m   kubelet, localhost  Started container

检查 Rancher 日志

使用 kubectl 列出 pods。

kubectl -n cattle-system get pods

NAME                           READY     STATUS    RESTARTS   AGE
pod/rancher-784d94f59b-vgqzh   1/1       Running   0          10m

使用 kubectl 和 pod 名称列出 pod 的日志。

kubectl -n cattle-system logs -f rancher-784d94f59b-vgqzh

证书 CN 是 "Kubernetes Ingress Controller Fake Certificate"

使用您的浏览器检查证书详细信息。如果显示的通用名称是 "Kubernetes Ingress Controller Fake Certificate",那么在读取或颁发您的 SSL 证书时可能出现了问题。

如果您使用 LetsEncrypt 来颁发证书,有时颁发证书可能需要几分钟。

检查 cert-manager 颁发的证书(Rancher 生成或 LetsEncrypt)是否存在问题。

cert-manager 有 3 个部分。

  • cert-manager pod 在 cert-manager 名称空间中。

  • Issuer 对象在 cattle-system 名称空间中。

  • Certificate 对象在 cattle-system 名称空间中。

向后工作,对每个对象执行 kubectl describe 并检查事件。您可以追踪可能缺失的内容。

例如,Issuer 存在问题:

kubectl -n cattle-system describe certificate
...
Events:
  Type     Reason          Age                 From          Message
  ----     ------          ----                ----          -------
  Warning  IssuerNotReady  18s (x23 over 19m)  cert-manager  Issuer rancher not ready
kubectl -n cattle-system describe issuer
...
Events:
  Type     Reason         Age                 From          Message
  ----     ------         ----                ----          -------
  Warning  ErrInitIssuer  19m (x12 over 19m)  cert-manager  Error initializing issuer: secret "tls-rancher" not found
  Warning  ErrGetKeyPair  9m (x16 over 19m)   cert-manager  Error getting keypair for CA issuer: secret "tls-rancher" not found

检查您自己的 SSL 证书是否存在问题。

您的证书直接应用于 cattle-system 命名空间中的 Ingress 对象。

检查 Ingress 对象的状态,看看它是否准备好。

kubectl -n cattle-system describe ingress

如果它已准备好而 SSL 仍然无法工作,您可能有一个格式错误的证书或密钥。

检查 nginx-ingress-controller 日志。由于 nginx-ingress-controller 在其 pod 中有多个容器,您需要指定容器的名称。

kubectl logs -n traefik traefik-6b94b8b688-bngw2
...
W0705 23:04:58.240571       7 backend_ssl.go:49] error obtaining PEM from secret cattle-system/tls-rancher-ingress: error retrieving secret cattle-system/tls-rancher-ingress: secret cattle-system/tls-rancher-ingress was not found

没有找到类型为 "Issuer" 的匹配项。

您选择的 SSL 配置选项要求在安装 Rancher 之前安装 cert-manager,否则会显示以下错误:

Error: validation failed: unable to recognize "": no matches for kind "Issuer" in version "certmanager.k8s.io/v1alpha1"

安装 cert-manager 并再次尝试安装 Rancher。

Canal Pods 显示已准备好 2/3

此问题最常见的原因是节点之间未开启8472/UDP端口。检查您的本地防火墙、网络路由或安全组。

一旦网络问题解决,canal pods 应该超时并重启以建立连接。

连接 /var/run/docker.sock 失败:ssh:被拒绝:管理上禁止(打开失败)

此错误的一些原因包括:

  • 指定的用户没有权限访问 Docker 套接字。可以通过登录到主机并运行命令 docker ps 来检查:

    $ ssh user@server
    user@server$ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

请参见 以非根用户管理 Docker 如何正确设置。

  • 当使用 RedHat/CentOS 作为操作系统时,您不能使用用户 root 连接到节点,因为 Bugzilla #1527565。您需要添加一个单独的用户并配置其访问 Docker 套接字。请参见 以非根用户管理 Docker 如何正确设置。

  • SSH 服务器版本不是 6.7 或更高版本。这对于套接字转发的工作是必要的,套接字转发用于通过 SSH 连接到 Docker 套接字。可以使用 sshd -V 在您连接的主机上检查,或使用 netcat:

    $ nc xxx.xxx.xxx.xxx 22
    SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.10

连接 ssh 使用地址 [xxx.xxx.xxx.xxx:xx] 失败:ssh:握手失败:ssh:无法验证,尝试的方法 [none publickey],没有支持的方法。

指定为 ssh_key_path 的密钥文件不正确,无法访问节点。仔细检查您是否为节点指定了正确的 ssh_key_path,以及您是否指定了正确的用户进行连接。

无法连接到 unix:///var/run/docker.sock 的 Docker 守护进程。Docker 守护进程正在运行吗?

节点在配置的 addressport 上不可达。

代理报告 TLS 错误。

使用 Rancher 时,您可能会遇到来自 fleet-agentsystem-agentcluster-agent 的错误消息,例如以下消息:

tls: failed to verify certificate: x509: failed to load system roots and no roots provided; readdirent /dev/null: not a directory

当 Rancher 配置为将 agent-tls-mode 设置为 strict 时,但在 cacert 设置中找不到 cacerts,就会发生这种情况。要解决此问题,请将 agent-tls-mode 设置为 system-store,或按照 添加 TLS 密钥 中的说明上传 Rancher 的 CA。

新的集群部署卡在“等待代理检查”中。

当 Rancher 将 agent-tls-mode 设置为 strict 时,新集群可能无法配置,并报告通用的“等待代理检查”错误消息。根本原因与上述 TLS 错误的情况类似 - Rancher 的代理无法确定 Rancher 正在使用哪个 CA(或无法验证 Rancher 的证书是否确实由指定的证书颁发机构签署)。

要解决此问题,请将 agent-tls-mode 设置为 system-store 或按照 添加 TLS 密钥 中的说明上传 Rancher 的 CA。