Tôi đang thiết lập cụm Kubernetes trên kim loại trần. Tôi đã sử dụng Kubeadm để cài đặt. Để làm cho các dịch vụ của tôi có thể truy cập được từ bên ngoài cụm, tôi đã cài đặt NGINX Ingress, sử dụng tài liệu sau: Tài liệu NGINX
Vì tôi không muốn giao tiếp với các dịch vụ của mình mà không có bảo mật TLS, nên tôi đã định cấu hình chứng chỉ nhờ cert-manager : Tài liệu quản lý chứng chỉ.
$kubectl nhận chứng chỉ
TÊN SẴN SÀNG BÍ MẬT TUỔI
chứng chỉ-tls-prod True tls-secret-prod 3h1m
tls-bí mật-prod Đúng tls-bí mật-prod 41m
Việc tạo chứng chỉ hoạt động và được khách hàng công nhận.
Bây giờ, tôi đang cố gắng cài đặt sổ đăng ký Docker của riêng mình (đăng ký: 2.7.1) trong cụm. Sau khi triển khai Pod và Dịch vụ, tôi đang cố gắng thực hiện đăng nhập docker
từ khách hàng của tôi, nhưng nó không hoạt động.
Cấu hình xâm nhập:
apiVersion: mạng.k8s.io/v1
loại: Xâm nhập
metadata:
chú thích:
# nginx.ingress.kubernetes.io/ssl-redirect: "true"
# nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
# nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
cert-manager.io/issuer: "letsencrypt-prod"
không gian tên: mặc định
tên: nginx-ingress
thông số kỹ thuật:
tls:
- máy chủ:
- ví dụ.com
secretName: tls-secret-prod
quy tắc:
- máy chủ: example.com
http:
con đường:
- con đường: /
pathType: Tiền tố
phụ trợ:
dịch vụ:
tên: đăng ký docker
Hải cảng:
số: 5000
Khi tôi cố gắng tiếp cận dịch vụ bằng cách thực hiện một thao tác cuộn tròn đơn giản:
cuộn tròn -v https://example.com/
* Đang thử <cluster-ip>:443...
* Đã kết nối với cổng example.com (<cluster-ip>) 443 (#0)
* ALPN, cung cấp h2
* ALPN, cung cấp http/1.1
* đặt thành công vị trí xác minh chứng chỉ:
* Tệp CA: /etc/ssl/certs/ca-certificates.crt
* CApath: không có
* TLSv1.3 (OUT), bắt tay TLS, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), bắt tay TLS, Chứng chỉ (11):
* TLSv1.2 (IN), bắt tay TLS, trao đổi khóa máy chủ (12):
* TLSv1.2 (IN), bắt tay TLS, Máy chủ hoàn tất (14):
* TLSv1.2 (OUT), bắt tay TLS, Trao đổi khóa máy khách (16):
* TLSv1.2 (OUT), Thay đổi mật mã TLS, Thay đổi thông số mật mã (1):
* TLSv1.2 (OUT), bắt tay TLS, Đã hoàn thành (20):
* TLSv1.2 (IN), bắt tay TLS, Đã hoàn thành (20):
* Kết nối SSL sử dụng TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, máy chủ được chấp nhận sử dụng http/1.1
* Chứng chỉ máy chủ:
* chủ đề: CN=example.com
* ngày bắt đầu: 13 tháng 7 10:03:45 2021 GMT
* ngày hết hạn: 11 tháng 10 10:03:44 2021 GMT
* chủ đềAltName: máy chủ "example.com" khớp với "example.com" của chứng chỉ
* tổ chức phát hành: C=US; O=Hãy mã hóa; CN=R3
* Chứng chỉ SSL xác minh ok.
> NHẬN / HTTP/1.1
> Máy chủ: example.com
> Tác nhân người dùng: curl/7.77.0
> Chấp nhận: */*
>
* Đã nhận HTTP/0.9 khi không được phép
* Đóng kết nối 0
* TLSv1.2 (OUT), cảnh báo TLS, thông báo đóng (256):
curl: (1) Đã nhận HTTP/0.9 khi không được phép
Cái bắt tay có vẻ đúng. Nhưng, cuối cùng có gì đó không ổn.
Nhật ký của nhóm đăng ký Docker:
http: Lỗi bắt tay TLS từ <ingress-pod-ip>:38686: tls: bản ghi đầu tiên trông không giống như bắt tay TLS
Nhật ký của Ingress Pod:
[lỗi] 84#84: *40 ngược dòng không gửi tiêu đề HTTP/1.0 hợp lệ trong khi đọc tiêu đề phản hồi từ ngược dòng, máy khách: <cluster-ip>, máy chủ: example.com, yêu cầu: "GET / HTTP/1.1", ngược dòng: "http://<registry-pod-ip>:5000/", máy chủ lưu trữ: "example.com"
Nhật ký đăng nhập Docker từ máy khách:
đăng nhập docker https://example.com
Phản hồi lỗi từ trình nền: Nhận "https://example.com/v2/": net/http: kết nối truyền tải HTTP/1.x bị hỏng: phản hồi HTTP không đúng định dạng "\x15\x03\x01\x00\x02\x02"
Theo những gì tôi hiểu, vấn đề xuất phát từ việc một trong các thành phần cố gắng giao tiếp với http thay vì https. Nhân tiện, upsteam là ở http, điều này có vẻ lạ.
Thật không may, tôi dường như không thể khắc phục vấn đề này. Tôi đã thử một số chú thích (được nhận xét) trong khai báo xâm nhập để buộc sử dụng https, nhưng nó không hoạt động.
Tôi đã thấy nó vấn đề trên Github, nhưng apiserver của tôi không có tham số --kubelet-https=false
Tôi sẽ đánh giá cao nếu bạn có bất kỳ manh mối nào có thể giúp tôi.