Puncte:3

Kubernetes Nginx Ingress și cert-manager Se așteaptă propagarea provocării HTTP-01: cod de stare greșit „401”, așteptat „200”

drapel cd

Am probleme cu implementarea mea pentru rapberry pi kubernetes

Problemă:

Am provocarea cert-manager letsencrypt ACME în așteptare din cauza unui cod de eroare 401 la instalarea bare metal kubernetes.

Înființat

Platformă: Raspberry Pi 4

OS: Ubuntu Server 20.04.3 LTS pe 64 de biți

Intrare: Nginx

Echilibrator de sarcină: Metallb

Rețea: Calico

Am instalat metallb și nginx prin helm folosind:

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>

și

helm install ingress-nginx ingress-nginx/ingress-nginx --namespace kube-system

Letsencrypt-ul meu arată astfel:

apiVersion: cert-manager.io/v1
fel: ClusterIssuer
metadate:
  nume: letsencrypt-prod
  namespace: cert-manager
specificație:
  culme:
    e-mail: <e-mail redactat>
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      nume: letsencrypt-prod
    rezolvatori:
    - http01:
        intrare:
          clasa: nginx

Configurarea mea de intrare nginx arată astfel:

---
apiVersion: networking.k8s.io/v1
fel: Intrare
metadate:
  namespace: "nextcloud" # Același spațiu de nume ca și implementarea
  nume: "nextcloud-ingress" # Numele intrării (vezi kubectl get ingress -A)
  adnotari:
    kubernetes.io/ingress.class: „nginx”
    nginx.ingress.kubernetes.io/ssl-redirect: „adevărat”
    nginx.ingress.kubernetes.io/force-ssl-redirect: „adevărat”
    cert-manager.io/cluster-issuer: "letsencrypt-prod" # Criptați folosind ClusterIssuer implementat în timpul configurării Cert-Manager
    nginx.ingress.kubernetes.io/proxy-body-size: "125m" # Măriți dimensiunea dimensiunii maxime permise a corpului solicitării clientului
specificație:
  tls:
  - gazde:
    - „nextcloud.<domeniu redactat>” # Gazdă pentru a accesa nextcloud
    secretName: "nextcloud-prod-tls" # Numele certificatului (vezi kubectl get certificate -A)
  reguli:
  - gazdă: „nextcloud.<domeniu redactat>” # Gazdă pentru a accesa nextcloud
    http:
      trasee:
        - cale: / # Vom accesa NextCloud prin adresa URL https://nextcloud.<domain.com>/
          pathType: Prefix
          backend:
            serviciu: 
              nume: "nextcloud-server" # Maparea la serviciu (vezi kubectl get services -n nextcloud)
              port: 
                număr: 80 # Maparea la port (vezi kubectl get services -n nextcloud)
---

Depanare

Când mă uit la jurnalele controlerului de intrare (spațiu de nume diferit) văd:

Serviciul „nextcloud/cm-acme-http-solver-9tccf” nu are niciun punct final activ.

Dar punctul final pare să existe atunci când kubectl obține punctele finale -A

Certificatul meu există ca:

kubectl obține certificatul -n nextcloud
NUME GATA SECRET VARSTA
nextcloud-prod-tls Fals nextcloud-prod-tls 3h58m

Urmând pașii de depanare recomandați de la managerul de certificare, am urmărit problema până la provocările prin care primesc:

Stare:
  Prezentat: adevărat
  Procesare: adevărat
  Motiv: Se așteaptă propagarea provocării HTTP-01: cod de stare greșit „401”, așteptat „200”
  Stare: în așteptare
Evenimente: <niciunul>

Sunt cam blocat că mi-am căutat inima pe Google, dar nu pare să fie multe despre asta. Bănuiesc că m-am umplut cu configurarea, dar am urmărit în principal documentația de pe paginile relevante. Orice indicații ar fi foarte apreciate :). Dacă aveți nevoie de informații suplimentare, spuneți-mi că în prezent este destul de lungă, așa că am încercat să includ ceea ce am crezut că sunt puncte problematice.

Dennis Nolte avatar
drapel us
dacă îți citesc corect configurația, primești un 401 în folderul/fișierul solicitat de cert-manager (certbot?). Acest lucru pare să se datoreze faptului că apelul de la letsencrypt se transferă către ceva ce ai putea fi protejat prin parolă Jurnalele dvs. nginx ar trebui să vă arate o solicitare către un nume de folder .well-known sau similar. După aceea este un nume generic. Acesta trebuie să fie accesibil de către un străin (certbot în acest exemplu) Pentru mine, a funcționat cel mai bine să fac o excludere a acelui director specific pentru a fi servit direct de nginx. Ceva ca o locație .bloc binecunoscut în configurația nginx.
Mikołaj Głodziak avatar
drapel id
Ideea lui @DennisNolte este bună. Ați putea să-l încercați și să ne știți dacă funcționează?
Llewyn S avatar
drapel cd
@DennisNolte Mulțumesc pentru răspuns, nu am putut găsi nicio încercare de a accesa directorul/.well-known/ în jurnalul controlerului Nginx, dar am putut găsi o referință la el și la domeniul meu în nginx.conf Sugerați să schimb locația /.well-known/ într-un alt director din nginx.conf?
Mikołaj Głodziak avatar
drapel id
Ați văzut [acest subiect](https://github.com/jetstack/cert-manager/issues/2517)? Este similar cu problema ta?
Llewyn S avatar
drapel cd
@MikoÅajGÅodziak M-am uitat prin el, dar nu am găsit nimic care să se aplice. Se pare că majoritatea oamenilor nu primesc 401...Nu am idee cum să depanez, deoarece nu există probleme de permisiuni în jurnalul de intrare. Doar provocarea certificatului primește eroarea 401. Mă întreb dacă pot adăuga cumva cert-manager la un grup RBAC sau ceva...
Dennis Nolte avatar
drapel us
va trebui să încercați și să vă dați seama cu ce provocarea de certificare este de fapt accesarea serverului dvs., aceasta ar trebui să fie în jurnalele de intrare. Fișierul se numește de obicei ceva de genul access.log, eventual cu un nume de domeniu în față. În acel fișier veți găsi apelul HTTP pe care îl primește nginx. Dacă nu găsiți nicio intrare, faceți unele manual pentru a confirma că este fișierul jurnal corect. Același lucru este valabil și pentru backend-ul dvs., dar ar putea trebui configurat mai întâi. Odată ce cunoașteți apelul corect, puteți verifica dacă permiteți accesul la acel director și puteți determina cine ar trebui să servească acel director
Wytrzymały Wiktor avatar
drapel it
Salut @LlewynS. Orice actualizari?
Llewyn S avatar
drapel cd
Încă nu am putut găsi niciun jurnal de ajutor.
Llewyn S avatar
drapel cd
OK, am creat un exemplu minim fără un manager de certificare. Am descoperit că, dacă încercam să mă conectez la FQDN-ul meu prin rețeaua mea de acasă, de fapt mă ducea la autentificarea routerului... Mă pot conecta prin FQDN acum prin VPN sau telefon mobil. Acest lucru nu rezolvă cu adevărat cert-managerul care are 401 probleme, cu excepția cazului în care rutarea prin rețeaua de domiciliu îl trimite și către autentificarea routerului, mai degrabă decât intrarea....
Puncte:1
drapel jp

În cazul meu, clusterissuer a indicat o clasă de intrare greșită

kubectl edita clusterissuer XXXX

rezolvatori:
- http01:
    intrare:
      clasa: ngintern

Asigurați-vă că clasa indică același lucru cu intrarea.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.