Estoy tratando de acceder a un host que se encuentra en otro servidor (pero en mi red) desde dentro del módulo de implementación y estoy usando microk8s .
El caso es que en el servidor donde tengo microk8s instalado puedo hacer ping fácilmente haciendo ping my-network-host.qa.local . Pero cuando entro en el pod con microk8s kubectl exec -it pod_name -- /bin/bash y hago ping my-network-host.qa.local dice: Name or service not known .
Y cuando me conecto a una VPN en mi computadora para estar en esa red y la implemento localmente usando docker-desktop kubernetes , puedo hacer ping a ese host desde dentro del pod. Así que creo que el problema radica en microk8s que no permite que mi pod use mi red.
¿Hay alguna forma de decirle a microk8s que use mis hosts de mi red?
PD: puedo hacer ping a la ip de ese servidor desde el pod, pero no puedo hacer ping al host desde el pod
Basado en otra respuesta que encontré en StackOverflow, logré arreglarlo.
Se necesitaron 2 cambios para que funcionara:
Actualice la configuración de kubelet para usar resolv-conf :
sudo echo "--resolv-conf=/run/systemd/resolve/resolv.conf" >> /var/snap/microk8s/current/args/kubeletReinicie el servicio kubelet:
sudo service snap.microk8s.daemon-kubelet restartLuego, cambie el reenvío de CoreDNS para que apunte a su servidor de nombres:
Primero abra el mapa de configuración de coredns para que pueda editarlo
sudo microk8s.kubectl edit configmap coredns -n kube-systemy actualice el archivo en
forward . 8.8.8.8 8.8.4.4 #REMOVE THIS LINE forward . xxx.xxx.xxx.xxx #ADD THIS WITH YOUR IPPuede obtener la dirección DNS eth0:
nmcli dev show 2>/dev/null | grep DNS | sed 's/^.*:\s*//' En mi caso, ya tenía la ip como servidor de nombres en /run/systemd/resolve/resolv.conf .
Ahora simplemente guarde los cambios y entre en sus pods para poder acceder a ellos.
Hay un comentario en otra publicación que sugiere agregar
forward . /etc/resolv.confPero eso no funcionó en mi caso.
Cuando crea una red k8s, k8s crea una LAN para la red y cada pod obtiene una dirección IP y un nombre de host dentro de la red, esa red k8s se comunica con su LAN local a través de my-network-host.qa.local proporcionado para el red k8s.
Entonces, cuando está en bash dentro del pod, no ve my-network-host.qa.local , ve la LAN k8s con todos los pods conectados y cada pod tendrá una dirección IP específica y un nombre de host en el Espacio IP de la red k8s.
Entonces, en lugar de usar la IP en su LAN, debe usar una IP de la LAN k8s o un nombre de host para llegar a un módulo específico desde dentro de la red k8s.
Si sus pods necesitan un servicio de acceso en una red diferente, esa red debe ser accesible desde dentro de la red k8s. También podría crear un servicio headless-service k8s
Digamos que desea conectarse a Mongolen en su servidor local. En este caso, podemos crear un [headless service][1] y un punto final dentro del clúster... el archivo mongodb-service.yaml debería verse así:
apiVersion: v1 kind: Service metadata: name: mongodb-service spec: clusterIP: None ports: - protocol: TCP port: the-port targetPort: the-port selector: name: example type: ClusterIP --- apiVersion: v1 kind: Endpoints metadata: name: mongodb-service subsets: - addresses: - ip: the-kluster-ip ports: - port: the-portDespués de crear el servicio y el punto final, puede usar el nombre y el puerto del servicio mongodb dentro de cualquier pod de este clúster como punto de destino.