跳至主要内容

疑難排解 Rancher Server Kubernetes 叢集

本節描述如何疑難排解在 Kubernetes 叢集上安裝的 Rancher。

相關命名空間​

大部分的疑難排解將在這 3 個命名空間中的物件上進行。

  • cattle-system - rancher 部署和 pod。
  • ingress-nginx - Ingress controller pod 和服務。
  • cert-manager - cert-manager pod。

"default backend - 404"​

許多事情可能導致 ingress-controller 無法將流量轉發到您的 rancher 實例。大多數時候這是由於錯誤的 SSL 設定。

需要檢查的事項

檢查 Rancher 是否正在執行​

使用 kubectl 檢查 cattle-system 系統命名空間,查看 Rancher pod 是否處於 Running 狀態。

kubectl -n cattle-system get pods

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

如果狀態不是 Running,請在 pod 上執行 describe 並檢查 Events。

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 列出 pod。

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"​

使用瀏覽器檢查憑證詳細資訊。如果它顯示 Common Name 是 "Kubernetes Ingress Controller Fake Certificate",則讀取或簽發 SSL 憑證時可能出錯。

備註

如果您使用 LetsEncrypt 簽發憑證,有時可能需要幾分鐘才能簽發憑證。

檢查 cert-manager 簽發的憑證問題(Rancher 產生或 LetsEncrypt)​

cert-manager 有 3 個部分。

  • cert-manager namespace 中的 cert-manager pod。
  • cattle-system namespace 中的 Issuer 物件。
  • cattle-system namespace 中的 Certificate 物件。

倒著查,對每個物件執行 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 namespace 中的 Ingress 物件。

檢查 Ingress 物件的狀態,查看它是否已就緒。

kubectl -n cattle-system describe ingress

如果它已就緒但 SSL 仍然無法運作,您可能有格式錯誤的憑證或 secret。

檢查 nginx-ingress-controller 日誌。因為 nginx-ingress-controller 的 pod 中有多個容器,您需要指定容器的名稱。

kubectl -n ingress-nginx logs -f nginx-ingress-controller-rfjrq nginx-ingress-controller
...
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

No matches for kind "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 Pod 顯示 READY 2/3​

此問題最常見的原因是節點之間的埠 8472/UDP 未開放。檢查您的本地防火牆、網路路由或安全群組。

一旦網路問題解決,canal pod 應該會逾時並重新啟動以建立其連線。

nginx-ingress-controller Pod 顯示 RESTARTS​

此問題最常見的原因是 canal pod 無法建立覆蓋網路。請參閱 Canal Pod 顯示 READY 2/3 進行疑難排解。

Failed to dial to /var/run/docker.sock: ssh: rejected: administratively prohibited (open failed)​

此錯誤的一些原因包括:

  • 指定連線的使用者沒有存取 Docker socket 的權限。這可以透過登入主機並執行命令 docker ps 來檢查:
$ ssh user@server
user@server$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

請參閱以非 root 使用者管理 Docker以了解如何正確設定。

  • 當使用 RedHat/CentOS 作為作業系統時,由於 Bugzilla #1527565,您不能使用 root 使用者連線到節點。您需要新增一個單獨的使用者並設定它以存取 Docker socket。請參閱以非 root 使用者管理 Docker以了解如何正確設定。

  • SSH 伺服器版本不是 6.7 或更高版本。socket 轉發需要這個版本才能運作,它用於透過 SSH 連線到 Docker socket。這可以在您連線的主機上使用 sshd -V 檢查,或使用 netcat:

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

Failed to dial ssh using address [xxx.xxx.xxx.xxx:xx]: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain​

指定為 ssh_key_path 的金鑰檔案不正確,無法存取節點。再次檢查您是否為節點指定了正確的 ssh_key_path,以及是否指定了正確的使用者進行連線。

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?​

無法在設定的 address 和 port 上存取節點。

Agent 報告 TLS 錯誤​

使用 Rancher 時,您可能會遇到來自 fleet-agent、system-agent 或 cluster-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 Secrets 中的說明上傳 Rancher 的 CA。

新叢集部署卡在 "Waiting for Agent to check in"​

當 Rancher 的 agent-tls-mode 設定為 strict 時,新叢集可能無法佈建並報告一般的 "Waiting for Agent to check in" 錯誤訊息。這個問題的根本原因與上述 TLS 錯誤的情況類似 - Rancher 的 agent 無法確定 Rancher 使用的是哪個 CA(或無法驗證 Rancher 的憑證實際上是由指定的憑證授權單位簽署的)。

要解決此問題,請將 agent-tls-mode 設定為 system-store,或按照新增 TLS Secrets 中的說明上傳 Rancher 的 CA。