Setez un cluster Kubernetes pe bare metal. Am folosit Kubeadm pentru instalare. Pentru a-mi face serviciile accesibile din afara clusterului, am instalat un NGINX Ingress, folosind următoarea documentație: NGINX doc
Pentru că nu vreau să comunic cu serviciile mele fără securitate TLS, am configurat certificatul datorită cert-manager : Cert-manager doc.
$kubectl obține certificat
NUME GATA SECRET VARSTA
certificat-tls-prod True tls-secret-prod 3h1m
tls-secret-prod True tls-secret-prod 41m
Generarea certificatelor funcționează și sunt recunoscute de client.
Acum, încerc să instalez propriul meu registru Docker (registry:2.7.1) în cluster. După implementarea Pod-ului și a Serviciului, încerc să fac a conectare la docker
de la clientul meu, dar nu merge.
Configurație de intrare:
apiVersion: networking.k8s.io/v1
fel: Intrare
metadate:
adnotari:
# nginx.ingress.kubernetes.io/ssl-redirect: „adevărat”
# nginx.ingress.kubernetes.io/force-ssl-redirect: „adevărat”
# nginx.ingress.kubernetes.io/ssl-passthrough: „adevărat”
nginx.ingress.kubernetes.io/backend-protocol: „HTTPS”
cert-manager.io/issuer: „letsencrypt-prod”
spatiu de nume: implicit
nume: nginx-ingress
specificație:
tls:
- gazde:
- example.com
secretName: tls-secret-prod
reguli:
- gazdă: example.com
http:
trasee:
- cale: /
pathType: Prefix
backend:
serviciu:
nume: docker-registry
port:
număr: 5000
Când încerc să ajung la serviciu făcând un simplu curl:
curl -v https://example.com/
* Se încearcă <cluster-ip>:443...
* Conectat la example.com (<cluster-ip>) portul 443 (#0)
* ALPN, oferind h2
* ALPN, oferind http/1.1
* setați cu succes locațiile de verificare a certificatelor:
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: niciunul
* TLSv1.3 (OUT), strângere de mână TLS, salut client (1):
* TLSv1.3 (IN), strângere de mână TLS, salut server (2):
* TLSv1.2 (IN), strângere de mână TLS, Certificat (11):
* TLSv1.2 (IN), strângere de mână TLS, schimb de chei de server (12):
* TLSv1.2 (IN), TLS handshake, Server terminat (14):
* TLSv1.2 (OUT), TLS handshake, Schimb cheie client (16):
* TLSv1.2 (OUT), TLS schimbă cifra, Schimbă specificația cifrului (1):
* TLSv1.2 (OUT), TLS handshake, Terminat (20):
* TLSv1.2 (IN), strângere de mână TLS, Terminat (20):
* Conexiune SSL folosind TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server acceptat să utilizeze http/1.1
* Certificat de server:
* subiect: CN=example.com
* data începerii: 13 iulie 10:03:45 2021 GMT
* data expirării: 11 octombrie 10:03:44 2021 GMT
* subjectAltName: gazda „example.com” a corespuns certificatului „example.com”
* emitent: C=US; O=Let's Encrypt; CN=R3
* Verificare certificat SSL ok.
> GET / HTTP/1.1
> Gazdă: example.com
> User-Agent: curl/7.77.0
> Accept: */*
>
* A primit HTTP/0.9 când nu este permis
* Închiderea conexiunii 0
* TLSv1.2 (OUT), alertă TLS, notificare de închidere (256):
curl: (1) A primit HTTP/0.9 când nu este permis
Strângerea de mână pare corectă. Dar, ceva nu este în regulă până la urmă.
Jurnalul podului de registru Docker:
http: Eroare de strângere de mână TLS de la <ingress-pod-ip>:38686: tls: prima înregistrare nu arată ca o strângere de mână TLS
Jurnalul Podului de intrare:
[eroare] 84#84: *40 în amonte nu a trimis un antet HTTP/1.0 valid în timp ce citiți antetul răspunsului din amonte, client: <cluster-ip>, server: example.com, cerere: „GET / HTTP/1.1”, în amonte: „http://<registry-pod-ip>:5000/”, gazdă: „example.com”
Jurnalul de conectare Docker de la client:
conectare la docker https://example.com
Răspuns de eroare de la demon: Obțineți „https://example.com/v2/”: net/http: conexiune de transport HTTP/1.x întreruptă: răspuns HTTP incorect „\x15\x03\x01\x00\x02\x02”
Din câte am înțeles, problema vine din faptul că una dintre componente încearcă să comunice cu http în loc de https. Apropo, upsteam-ul este în http, ceea ce pare ciudat.
Din păcate, se pare că nu pot remedia această problemă. Am încercat mai multe adnotări (care sunt comentate) în declarația de intrare pentru a forța utilizarea https, dar nu a funcționat.
am vazut asta problemă pe Github, dar apiserver-ul meu nu are parametrul --kubelet-https=fals
Aș aprecia dacă ai avea vreun indiciu care m-ar putea ajuta.