Estoy ejecutando un pod de Kubernetes (kubeflow + k8s) con una computadora portátil Jupyter y un servicio Docker fuera del servidor Kubernetes. Actualmente estoy intentando conectarme a un servicio SQL pero sigue obteniendo ConnectionResetError, tanto el firewall como la ventana acoplable están exponiendo el puerto necesario, pero el k8s sigue sin poder conectarse, ¿cuál podría ser el problema? (dime si necesitas más detalles).
Gracias.
Respuesta1
Como se menciona en los comentarios.
Desde la perspectiva de istio para que esto funcione, tendrías que agregarEntrada de serviciopara que los pods inyectados en istio puedan comunicarse con una base de datos externa.
ServiceEntry permite agregar entradas adicionales al registro de servicios interno de Istio, de modo que los servicios descubiertos automáticamente en la malla puedan acceder o enrutarse a estos servicios especificados manualmente. Una entrada de servicio describe las propiedades de un servicio (nombre DNS, VIP, puertos, protocolos, puntos finales). Estos servicios podrían ser externos a la malla (por ejemplo, API web) o servicios internos de la malla que no forman parte del registro de servicios de la plataforma (por ejemplo, un conjunto de máquinas virtuales que se comunican con servicios en Kubernetes). Además, los puntos finales de una entrada de servicio también se pueden seleccionar dinámicamente utilizando el campo workloadSelector. Estos puntos finales pueden ser cargas de trabajo de VM declaradas mediante el objeto WorkloadEntry o pods de Kubernetes. La capacidad de seleccionar pods y VM en un único servicio permite la migración de servicios de VM a Kubernetes sin tener que cambiar los nombres DNS existentes asociados con los servicios.
Hay un ejemplo en istio.documentación.
Tenga en cuenta que puede encontrarMySQL no puede conectarse después de instalar Istio. Esto se debe al modo PERMISIVO, que no funciona con MySQL. Es posible que vea mensajes de error comoERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0.
Hay dos opciones para solucionar el problema.
1.Desactive TLS mutuo.
Elija esta opción si no desea TLS mutuo de Istio. Esto se logra deshabilitando explícitamente TLS mutuo en el servicio MySQL.
$ kubectl apply -f - <<EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: mysql-nomtls-peerauthn
spec:
selector:
matchLabels:
app: <YOUR-MYSQL-SERVICE> # The label of *your* K8s Service
mtls:
mode: DISABLE
EOF
2.Habilite TLS mutuo en modo ESTRICTO.
Si desea protección TLS mutua para MySQL, habilite TLS mutua utilizando una regla de destino y una política de autenticación.
$ kubectl apply -f - <<EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: mysql-mtls-peerauthn
spec:
selector:
matchLabels:
app: <YOUR-MYSQL-SERVICE> # The label of *your* K8s Service
mtls:
mode: STRICT
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mysql-mtls-dr
spec:
host: YOUR-MYSQL-SERVICE # The name of *your* K8s Service
trafficPolicy:
tls:
mode: ISTIO_MUTUAL
EOF