Necesito saber cómo conectar mi clúster de Kubernetes a una base de datos de SQL Server externa que se ejecuta en una imagen acoplable fuera del clúster de Kubernetes.
Actualmente tengo dos pods en mi clúster que se están ejecutando, cada uno tiene una imagen diferente creada a partir de las aplicaciones principales de asp.net. Hay una imagen acoplable completamente separada (fuera de Kubernetes pero que se ejecuta localmente en mi máquina localhost, 1433) que aloja una base de datos de SQL Server. Necesito las aplicaciones en mis pods de Kubernetes para poder acceder y manipular esa base de datos. Intenté crear un archivo YAML y configurar diferentes puertos, pero no sé cómo hacer que esto funcione o cómo probar que realmente funciona después de configurarlo. Necesito los pasos/comandos exactos para crear un servicio capaz de enrutar una conexión desde las imágenes en mi clúster a la base de datos y viceversa.
Creación de Docker SQL Server (powershell elevado/escritorio docker):
docker pull mcr.microsoft.com/mssql/server:2017-latest docker run -d -p 1433:1433 --name sql -v "c:/Temp/DockerShared:/host_mount" -e SA_PASSWORD="aPasswordPassword" -e ACCEPT_EULA=Y mcr.microsoft.com/mssql/server:2017-latestdefiniciones.yaml
#Pods in the cluster apiVersion: v1 kind: Pod metadata: name: pod-1 labels: app: podnet type: module spec: containers: - name: container1 image: username/image1 --- apiVersion: v1 kind: Pod metadata: name: pod-2 labels: app: podnet type: module spec: containers: - name: container2 image: username/image2 --- #Service created in an attempt to contact external SQL Server DB apiVersion: v1 kind: Service metadata: name: ext-sql-service spec: ports: - port: 1433 targetPort: 1433 type: ClusterIP --- apiVersion: v1 kind: Endpoints metadata: name: ext-sql-service subsets: - addresses: - ip: (Docker IP for DB Instance) ports: - port: 1433Idealmente, me gustaría que las aplicaciones en mi clúster de Kubernetes puedan manipular el servidor SQL que ya configuré (ejecutándose fuera del clúster pero localmente en mi máquina).
Cuando se ejecuta desde la ventana acoplable local, su cadena de conexión NO es su máquina local. Es el "mundo" de la ventana acoplable local que se está ejecutando en su máquina.
host.docker.interno:1433
Lo anterior es un contenedor docker hablando con su máquina local. Obviamente, el puerto podría ser diferente según cómo lo expusiste.
......
Si está tratando de hacer que su contenedor en ejecución se comunique con el servidor sql, que TAMBIÉN se está ejecutando dentro del mundo de la ventana acoplable, esa cadena de conexión se ve así:
Nombre del servidor:
my-mssql-service-deployment-name.$_CUSTOMNAMESPACENAME.svc.cluster.local
Donde $_CUSTOMNAMESPACENAME es probablemente "predeterminado", pero es posible que esté ejecutando un espacio de nombres diferente.
my-mssql-service-deployment-name es el nombre de SU implementación (lo tengo anotado aquí)
Tenga en cuenta que no hay ningún número de puerto aquí.
Esto está documentado aquí:
https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#services
El problema puede estar en el tipo de servicio que pones. ClusterIP le permite solo conectarse entre pods dentro del clúster. Para conectarse a un servicio externo, solo debe cambiar la definición del tipo de servicio como NodePort .
Intenta cambiar la definición del servicio:
#Service created in an attempt to contact external SQL Server DB apiVersion: v1 kind: Service metadata: name: ext-sql-service spec: type: NodePort ports: - port: 1433 targetPort: 1433y ejecutar el comando:
$ kubectl apply -f your_service_definition_file_name.yamlRecuerde ejecutar este comando en el espacio de nombres adecuado, donde está configurada su implementación.
Una mala práctica es superponer una variable de entorno en el contenedor. Y con "docker run", pase esa variable de entorno VALOR al contenedor.
Por supuesto, en el contexto de ejecutar el comando docker
$ docker run -d -p 1433:1433 --name sql -v "c:/Temp/DockerShared:/host_mount" -e SA_PASSWORD="aPasswordPassword" -e ACCEPT_EULA=Y mcr.microsoft.com/mssql/server:2017-latestPoner la contraseña de base de datos visible no es seguro. Utilice los secretos de Kubernetes.
Puede encontrar más información aquí: kubernetes-secret .