es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo conectarse a una red local desde un pod de Kubernetes.

Tengo un clúster k8s configurado en algunas Raspberry Pis para el desarrollo local. Estoy tratando de usar una base de datos que se ejecuta en la red local, sin embargo, parece que no puedo hacer que las cápsulas se conecten a la base de datos. He intentado usar un servicio y una configuración de punto final:

---
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.database.host }}
  annotations:
    "helm.sh/hook-weight": "-2"
    "helm.sh/hook": pre-install,pre-upgrade
    "helm.sh/hook-delete-policy": before-hook-creation
spec:
  clusterIP: None
  ports:
    - port: {{ .Values.database.port }}
---
apiVersion: v1
kind: Endpoints
metadata:
  name: {{ .Values.database.host }}
  annotations:
    "helm.sh/hook-weight": "-2"
    "helm.sh/hook": pre-install,pre-upgrade
    "helm.sh/hook-delete-policy": before-hook-creation
subsets:
  - addresses:
      - ip: {{ .Values.database.ip }}
    ports:
      - port: {{ .Values.database.port }}
        name: {{ .Values.database.host }}

Puedo confirmar que los recursos de punto final y servicio están creados y que todos los detalles de conexión son correctos, pero mi aplicación (que se ejecuta en el clúster k8s) aún no se conectará a la base de datos en la red del host. Al leer la documentación (https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors) más detenidamente, parece que estos recursos son para conectarse al clúster desde la red local, ¿no al revés? ¿Existe alguna forma de conectar servicios en una red local desde recursos k8s?

Resultado de ejecutar kubectl get pods -n kube-system:

local-path-provisioner-5ff76fc89d-txj6k   1/1     Running   4          65d
metrics-server-86cbb8457f-r8q6w           1/1     Running   3          65d
coredns-7448499f4d-5646n                  1/1     Running   10         176d
csi-smb-node-9j5gm                        3/3     Running   3291       150d
csi-smb-controller-6c696945f8-8t6qj       3/3     Running   27         150d
csi-smb-controller-6c696945f8-ck5hh       3/3     Running   3361       150d
csi-smb-node-822bb                        3/3     Running   3260       150d
csi-smb-node-4nckf                        3/3     Running   3655       150d
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando conectarte a una base de datos que se encuentra en la red local desde un clúster de Kubernetes. El archivo YAML que has proporcionado es correcto para crear un servicio y un punto final (endpoint) para conectarte al clúster de Kubernetes desde la red local.

    Sin embargo, para poder conectar a un servicio en la red local desde Kubernetes, necesitarás utilizar un enfoque diferente. Puedes utilizar un Servicio de Kubernetes del tipo ExternalName para exponer el servicio de la base de datos desde la red local al clúster de Kubernetes.

    Aquí tienes un ejemplo de archivo YAML para crear un servicio ExternalName:

    apiVersion: v1
    kind: Service
    metadata:
      name: external-db-service
    spec:
      type: ExternalName
      externalName: <nombre_del_servicio_de_la_base_de_datos>.<nombre_del_dominio_de_la_red_local>
      ports:
      - port: <puerto_del_servicio_de_la_base_de_datos>
        targetPort: <puerto_del_servicio_de_la_base_de_datos>
    

    Reemplaza <nombre_del_servicio_de_la_base_de_datos> con el nombre del servicio de la base de datos que se encuentra en la red local, <nombre_del_dominio_de_la_red_local> con el nombre de dominio de la red local y <puerto_del_servicio_de_la_base_de_datos> con el número de puerto en el que se está ejecutando el servicio de la base de datos.

    ¡Espero que esto ayude!

Comments are closed.