Estoy trabajando localmente (dentro de Docker para Mac) en un clúster de Kubernetes que eventualmente se implementará en la nube. Planeamos utilizar un servicio de base de datos en ese entorno. Para simular eso, me gustaría que los servicios del clúster se conecten a una base de datos que se ejecuta fuera del clúster en mi computadora portátil.
¿Puedo hacer eso? Esto es lo que pensé que intentaría.
Service con type: ExternalName y externalName: somedb.local127.0.0.1 somedb.local a /etc/hosts en la computadora portátil¿Es eso correcto? ¿Hay una mejor manera?
Después de hablar con algunos colegas, encontré una solución.
En Docker para Mac, host.docker.internal apunta a la máquina host y eso me permite conectarme a la base de datos que se ejecuta allí, incluso desde contenedores que se ejecutan en el clúster K8s.
Puede tener un Servicio que apunte a una dirección fuera de su SDN, creando un objeto Endpoint con un nombre coincidente.
---- apiVersion: v1 kind: Service metadata: name: external-db namespace: my-namespace spec: ports: - name: exporter-3306 port: 3306 selector: name: external-db --- apiVersion: v1 kind: Endpoints metadata: name: external-db namespace: my-namespace subsets: - addresses: - ip: 10.42.253.110 ports: - name: exporter-3306 port: 3306Puede agregar anulaciones de hosts en su definición de implementación:
apiVersion: apps/v1 kind: Deployment spec: template: spec: containers: ... hostAliases: - ip: 10.42.253.110 hostnames: - external-dbParece que los documentos de Kubernetes proporcionan instrucciones sobre cómo lograr esto. https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors
Una nota dice que las IP de punto final no deben ser: loopback (127.0.0.0/8 para IPv4, ::1/128 para IPv6), o local de enlace (169.254.0.0/16 y 224.0.0.0/24 para IPv4, fe80:: /64 para IPv6).