Ich habe Probleme mit meiner Rapberry Pi Kubernetes-Implementierung
Problem:
Aufgrund eines 401-Fehlercodes bei der Bare-Metal-Kubernetes-Installation wartet bei mir eine Cert-Manager-Letsencrypt-ACME-Challenge.
Aufstellen
Plattform: Raspberry Pi 4
Betriebssystem: Ubuntu Server 20.04.3 LTS 64 Bit
Eingang: Nginx
Loadbalancer: Metallb
Vernetzung: Calico
Ich habe Metallb und Nginx über Helm installiert mit:
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>
Und
helm install ingress-nginx ingress-nginx/ingress-nginx --namespace kube-system
Mein Letsencrypt sieht folgendermaßen aus:
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
Mein Nginx-Ingress-Setup sieht folgendermaßen aus:
---
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)
---
Debuggen
Wenn ich mir die Ingress-Controller-Protokolle (anderer Namespace) ansehe, sehe ich:
Service "nextcloud/cm-acme-http-solver-9tccf" does not have any active Endpoint.
Aber der Endpunkt scheint zu existieren, wenn ich kubectl get endpoints -A mache
Mein Zertifikat liegt vor als:
kubectl get certificate -n nextcloud
NAME READY SECRET AGE
nextcloud-prod-tls False nextcloud-prod-tls 3h58m
Ich habe die empfohlenen Debugschritte des Zertifikatsmanagers befolgt und das Problem bis zu den Herausforderungen verfolgt, wobei ich Folgendes erhalte:
Status:
Presented: true
Processing: true
Reason: Waiting for HTTP-01 challenge propagation: wrong status code '401', expected '200'
State: pending
Events: <none>
Ich stecke irgendwie fest. Ich habe so viel gegoogelt, wie ich konnte, aber es scheint nicht viel darüber zu geben. Ich schätze, ich habe es bei der Einrichtung vermasselt, aber ich bin hauptsächlich der Dokumentation auf den entsprechenden Seiten gefolgt. Ich wäre für jeden Hinweis sehr dankbar :). Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen. Dies ist derzeit ziemlich lang, also habe ich versucht, die Punkte aufzunehmen, die ich für problematisch hielt.
Antwort1
In meinem Fall zeigte der Clusterissuer auf die falsche Ingress-Klasse
kubectl bearbeitet Cluster-Aussteller XXXX
solvers:
- http01:
ingress:
class: nginternal
Stellen Sie sicher, dass die Klasse auf dasselbe wie der Eingang verweist.
Antwort2
Die Lösung für diese Frage bestand darin, dass mein Router kein NAT-Loopback durchführen konnte.
Mein Problem wurde durch den Kauf eines Routers mit dieser Funktion gelöst. Hoffentlich hilft das jedem, der solche Probleme hat.