• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

216
Vistas
Acceda a una base de datos externa desde Kubernetes

Tengo un kubernetes (v1.18.6) con 1 servicio (loadbalancer), 2 pods en un desarrollo:

 apiVersion: v1 kind: Service metadata: name: app-service spec: selector: app: app ports: - protocol: "TCP" port: 6000 targetPort: 5000 type: LoadBalancer

Una política de red para acceder a Intentert (es necesaria para mí):

 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: internet-access spec: podSelector: matchLabels: networking/allow-internet-access: "true" policyTypes: - Ingress - Egress ingress: - {}

Archivo de configuración de implementación

 apiVersion: apps/v1 kind: Deployment metadata: name: app-deployment spec: progressDeadlineSeconds: 120 selector: matchLabels: app: app replicas: 2 template: metadata: labels: app: app spec: imagePullSecrets: - name: myregistrykey containers: - name: app image: app imagePullPolicy: Always ports: - containerPort: 5000

Está funcionando correctamente. Pero ahora quiero conectar esta imagen a una base de datos externa (en otra red solo acceso por internet). Para esta proposición utilizo este servicio:

 apiVersion: v1 kind: Service metadata: name: postgresql spec: clusterIP: None ports: - port: 25060 --- apiVersion: v1 kind: Endpoints metadata: name: postgresql subsets: - addresses: - ip: 206............ ports: - port: 25060 name: postgresql

Es todos los servicios:

 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE app-service LoadBalancer 10.245.134.137 206........... 6000:31726/TCP 2d4h kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 3d7h postgresql ClusterIP None <none> 25060/TCP 19h

Pero cuando intento conectarme, recibo un error de tiempo de espera de la base de datos, como si no pudiera conectarme a la base de datos.

Tengo conexión a internet en la imagen.

Encontré la solución, el problema eran las reglas de entrada de la base de datos. Debo agregar la IP de Kubernetes.

Gracias.

about 3 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Esto es lo que funcionó para mí:

Defina un servicio, pero establezca clusterIP: None , por lo que no se crea un punto final.

Y luego cree un punto final usted mismo con el MISMO NOMBRE que su servicio y configure la IP y el puerto de su db.

En su ejemplo, tiene un tipo en su punto final: el nombre de su punto final es postgresql, no postgresSql.

mi ejemplo:

 --- service.yaml kind: Service apiVersion: v1 metadata: name: backend-mobile-db-service spec: clusterIP: None ports: - port: 5984 --- kind: Endpoints apiVersion: v1 metadata: name: backend-mobile-db-service subsets: - addresses: - ip: 192.168.1.50 ports: - port: 5984 name: backend-mobile-db-service
about 3 years ago · Santiago Trujillo Denunciar

0

Si entiendo correctamente, tiene su clúster con aplicación en la nube de Digital Ocean y su PostgreSQL está fuera de este clúster.

En su servicio de application service Application Deployment <>, ha utilizado servicios con selectores , por lo que no necesitaba crear Endpoints manualmente.

En su external database service , ha utilizado servicios sin selectores , por lo que tuvo que crear Endpoint manualmente.

Como la base de datos es external service , usar clusterIP: None tiene sentido, ya que intentará hacer coincidir los pods dentro del clúster. Supongo que lo agregó a medida que lee en este documento .

Lo último es que en Endpoint configuras ip: 206... que es lo mismo que el servicio de aplicación LoadBalancer ip?

 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE app-service LoadBalancer 10.245.134.137 206........... 6000:31726/TCP 2d4h subsets: - addresses: - ip: 206............

Es solo una parte de la información, así que supongo. Sin embargo, en esta parte debe proporcionar la IP de la base de database deseada, no la IP del Loadbalancer de su aplicación.

Ahora, según el escenario, puede conectarse:

  • Base de datos fuera del clúster con dirección IP
  • Base de datos alojada remotamente con URI
  • Base de datos alojada de forma remota con URI y reasignación de puertos

Puede encontrar información detallada sobre los escenarios anteriores en las mejores prácticas de Kubernetes: mapeo de servicios externos

Según su configuración actual, supongo que desea usar el scenario 1 .

Si esta base de database y cluster están en algún lugar de la nube, podría usar internal Database IP . De lo contrario, debe proporcionar la IP de la máquina donde se aloja esta base de datos.

También puede leer el artículo Servicios externos de acceso de Kubernetes .

Avíseme si aún tendrá problemas después del cambio de IP

about 3 years ago · Santiago Trujillo Denunciar

0

Para una mejor visibilidad, coloco la respuesta OP mencionada en la pregunta:

Encontré la solución, el problema eran las reglas de entrada de la base de datos. Debo agregar la IP de Kubernetes

about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda