Tengo un clúster EKS 1.18. Cuando intenté implementar un panel de control k8s, está fallando con el siguiente error.
Además, mi panel de control svc usa un loadBalancer.
kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard annotations: external-dns.alpha.kubernetes.io/hostname: "test.xxx.net" service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0 name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: LoadBalancer ports: - port: 443 targetPort: 8443 selector: k8s-app: kubernetes-dashboard Por favor, hágame saber qué significa el TLS handshake error . ¿Qué debo hacer para corregir este error?
registros:
2021/03/18 22:03:08 http: TLS handshake error from xx.xxx.xx:8279: EOF 2021/03/18 22:03:08 http: TLS handshake error from xx.xxx.xx:34935: EOF 2021/03/18 22:03:08 http: TLS handshake error from xx.xxx.xx:24437: EOF 2021/03/18 22:03:08 http: TLS handshake error from xx.xxx.xx:64552: EOF 2021/03/18 22:03:10 http: TLS handshake error from xx.xxx.xx:5481: EOFcódigo:
https://github.com/kubernetes/dashboard/releases/tag/v2.0.3
https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml
kubectl version + kubectl version Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.1", GitCommit:"d647ddbd755faf07169599a625faf302ffc34458", GitTreeState:"clean", BuildDate:"2019-10-02T23:49:20Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"18+", GitVersion:"v1.18.9-eks-d1db3c", GitCommit:"d1db3c46e55f95d6a7d3e5578689371318f95ff9", GitTreeState:"clean", BuildDate:"2020-10-20T22:18:07Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}zerkms ya arrojó algo de luz sobre la causa de su problema en su comentario:
Presumiblemente, su ingreso no comprende que el tablero finaliza tls e intenta enviar solicitudes http desnudas allí. Por lo tanto, lo que sea que use para ingresar/cargar el tráfico de equilibrio a la aplicación, debe configurarse para conectarse a través de tls. – zerkms 19 de marzo a las 2:55
También nos dijiste que no hay ningún ingreso configurado pero usas para conectar el nombre de dominio, apuntando a la IP de tu LoadBalancer. Eso está bien, pero tenga en cuenta que cuando crea un Service de tipo LoadBalancer en su clúster de EKS, de forma predeterminada se crea Classic Load Balancer . Funciona en la capa 7 del modelo OSI, por lo que reconoce el tráfico https, finaliza la conexión TLS y luego envía una solicitud http desnuda a sus pods backend. Como ya explicó zerkms , su backend no está preparado para manejar dicha conexión, ya que termina TLS en sí mismo.
Como ya mencioné, de forma predeterminada, cuando crea su servicio LoadBalancer , se crea Classic Load Balancer . Sin embargo, puede cambiar este comportamiento predeterminado agregando a su Service la siguiente anotación como se menciona aquí :
service.beta.kubernetes.io/aws-load-balancer-type: nlbComo Network Load Balancer opera en la capa 4 del modelo OSI, simplemente pasa paquetes TCP a sus pods de back-end sin inspeccionar su contenido, terminar TLS, etc. y espera tráfico https.
Alternativamente, puede configurar algún controlador de ingreso que esté configurado para admitir SSL-passthrough como ngix-ingress ya que, lamentablemente, elALB de AWS no lo admite.