Eu tenho um cluster Kubernetes executando aplicativos (atualmente em um conjunto de VMs do Vagrant CoreOS em um servidor local)
Eu quero poder depurar um aplicativo específico localmente no meu laptop, então trabalhei na configuração da VPN no cluster: uma VPN cliente / servidor baseada em kylemanna/docker-openvpn
, implantada como um pod de regular
Eu criei os pares cert / key, certs clientes etc ...
Posso me conectar à VPN bem.
Agora, conectar-se ao servidor VPN não me ajuda muito se não conseguir acessar os Serviços.
Eu tenho o addon DNS executando o skyDNS no cluster. Eu posso nslookup
meus serviços de outros pods no cluster, então tudo isso funciona bem, mas não consigo resolver os Serviços por nome no cliente VPN.
Eu posso pingar Pods por IP do cliente VPN (na sub-rede 10.2.0.0/16
) mas não consigo resolver com DNS
um nslookup
do cliente retorna:
nslookup myservice 10.3.0.10
Server: 10.3.0.10
Address: 10.3.0.10#53
** server can't find myservice: SERVFAIL
Um dos problemas da solução de problemas é que nem ping
nem traceroute
funcionam no IP do DNS (de qualquer pod), mas também resolvem serviços, portanto nslookup
é a maneira que eu sei verificar, mas isso é não é muito informativo.
O IP do host da VPN ao qual o pod é vinculado é 192.168.10.152
A sub-rede do Kubernetes é 10.2.0.0/16
O servidor do SkyDNS está em 10.3.0.10
A sub-rede do servidor VPN é 10.8.0.0/24
No servidor VPN, o ifconfig fornece:
eth0 Link encap:Ethernet HWaddr 02:42:0A:02:16:45
inet addr:10.2.22.69 Bcast:0.0.0.0 Mask:255.255.255.0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
Portanto, 10.2.22.69
é o Pod IP e o IP do servidor VPN é 10.8.0.1
, com o gateway sendo 10.8.0.2
i.
No pod do servidor VPN, a tabela de roteamento é semelhante a:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.2.22.1 0.0.0.0 UG 0 0 0 eth0
10.2.22.0 * 255.255.255.0 U 0 0 0 eth0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
10.8.0.2 * 255.255.255.255 UH 0 0 0 tun0
192.168.254.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
Eu posso alcançar meus aplicativos por IP (e obter dados), mas não consegui ao usar o IP de serviço (o IP do proxy que está na sub-rede 10.3.0.0)
Eu adicionei a rota route add -net 10.3.0.0/16 gw 10.8.0.2
ao servidor VPN e posso usar o IP de serviço para obter dados, mas o nslookup
apenas expira.
Acho que o tráfego pode não estar voltando do DNS. O DNS é em si um serviço com proxy no Kubernetes, o que adiciona um nível de complexidade.
Não sei como consertar isso.