我的 rapberry pi kubernetes 實作遇到問題
問題:
由於裸機 kubernetes 安裝上出現 401 錯誤代碼,我有 cert-manager LetsEncrypt ACME 挑戰正在等待。
設定
平台:樹莓派4
作業系統:Ubuntu伺服器20.04.3 LTS 64位
入口:Nginx
負載平衡器: Metallb
網路:印花布
我使用以下命令透過 helm 安裝了 metallb 和 nginx:
helm install metallb metallb/metallb --namespace kube-system\
--set configInline.address-pools[0].name=default\
--set configInline.address-pools[0].protocol=layer2\
--set configInline.address-pools[0].addresses[0]=<ip-range>
和
helm install ingress-nginx ingress-nginx/ingress-nginx --namespace kube-system
我的 LetsEncrypt 看起來像這樣:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
namespace: cert-manager
spec:
acme:
email: <email redacted>
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
我的 nginx 入口設定如下所示:
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: "nextcloud" # Same namespace as the deployment
name: "nextcloud-ingress" # Name of the ingress (see kubectl get ingress -A)
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
cert-manager.io/cluster-issuer: "letsencrypt-prod" # Encrypt using the ClusterIssuer deployed while setting up Cert-Manager
nginx.ingress.kubernetes.io/proxy-body-size: "125m" # Increase the size of the maximum allowed size of the client request body
spec:
tls:
- hosts:
- "nextcloud.<domain redacted>" # Host to access nextcloud
secretName: "nextcloud-prod-tls" # Name of the certificate (see kubectl get certificate -A)
rules:
- host: "nextcloud.<domain redacted>" # Host to access nextcloud
http:
paths:
- path: / # We will access NextCloud via the URL https://nextcloud.<domain.com>/
pathType: Prefix
backend:
service:
name: "nextcloud-server" # Mapping to the service (see kubectl get services -n nextcloud)
port:
number: 80 # Mapping to the port (see kubectl get services -n nextcloud)
---
偵錯
當我查看入口控制器日誌(不同的命名空間)時,我看到:
Service "nextcloud/cm-acme-http-solver-9tccf" does not have any active Endpoint.
但是當我執行 kubectl get endpoints -A 時,端點似乎存在
我的證書存在如下:
kubectl get certificate -n nextcloud
NAME READY SECRET AGE
nextcloud-prod-tls False nextcloud-prod-tls 3h58m
按照證書管理器推薦的調試步驟,我追蹤了該問題,從而找到了以下挑戰:
Status:
Presented: true
Processing: true
Reason: Waiting for HTTP-01 challenge propagation: wrong status code '401', expected '200'
State: pending
Events: <none>
我有點卡住了,我一直在谷歌上搜尋我的心,但似乎沒有太多關於這方面的內容。我猜我已經把設定搞砸了,但我主要是按照相關頁面上的文件進行操作。任何指示將不勝感激:)。如果您需要任何其他信息,請告訴我,目前這篇文章很長,因此我嘗試包含我認為存在問題的內容。
答案1
在我的例子中,clusterissuer 指向了錯誤的入口類
kubectl 編輯 clusterissuer XXXX
solvers:
- http01:
ingress:
class: nginternal
確保類別與入口指向相同。
答案2
這個問題的解決方法是我的路由器無法執行 NAT 環回。
購買具有此功能的路由器解決了我的問題。希望這對遇到此類問題的人有所幫助。