Provisionando as Rotas
Os pods programados para um nó recebem um endereço IP do intervalo CIDR de pods no worker(nó), por isso os pods não podem se comunicar com outros pods em execução em nós diferentes porque não existem rotas de rede.
então criaremos uma rota para cada nó de trabalho que mapeia o intervalo de CIDR do pod do nó para o endereço IP interno do nó.
Lembramos que existem outras maneiras de implementar o modelo de rede Kubernetes.
Vamos reunir todas as informações necessárias para criar rotas na rede VPC kubernetes-the-hard-way e usa-las para criar entradas na tabela de rotas.
Essa funcionalidade poderá fornecida por plug-ins CNI como: flannel, calico, amazon-vpc-cni-k8s, mas iremos fazer isso manualmente para entender o que esses plug-ins fazem nos bastidores.
Iremos ver o endereço IP interno e o intervalo CIDR do pod para cada worker e criar entradas na tabela de rota:
A Tabela de Rotas
for instance in worker-0 worker-1 worker-2; do instance_id_ip="$(aws ec2 describe-instances \ --filters "Name=tag:Name,Values=${instance}" \ --output text --query 'Reservations[].Instances[].[InstanceId,PrivateIpAddress]')" instance_id="$(echo "${instance_id_ip}" | cut -f1)" instance_ip="$(echo "${instance_id_ip}" | cut -f2)" pod_cidr="$(aws ec2 describe-instance-attribute \ --instance-id "${instance_id}" \ --attribute userData \ --output text --query 'UserData.Value' \ | base64 --decode | tr "|" "\n" | grep "^pod-cidr" | cut -d'=' -f2)" echo "${instance_ip} ${pod_cidr}" aws ec2 create-route \ --route-table-id "${ROUTE_TABLE_ID}" \ --destination-cidr-block "${pod_cidr}" \ --instance-id "${instance_id}" done
Resultado Esperado
10.0.1.20 10.200.0.0/24 { "Return": true } 10.0.1.21 10.200.1.0/24 { "Return": true } 10.0.1.22 10.200.2.0/24 { "Return": true }
Validando as Rotas
Atenção: >Valide as rotas de rede para cada instância de trabalho com o comando abaixo,
Tome cuidado com o comando pois pode pode bugar sua janela ssh atual
Durante a execução do comando você deverá ir final teclando a seta pra baixo até aparecer a palavra END , então digite a letra q para retonar ao shell sem danificar sua sessão
aws ec2 describe-route-tables \ --route-table-ids "${ROUTE_TABLE_ID}" \ --query 'RouteTables[].Routes'
Resultado Esperado
[ [ { "DestinationCidrBlock": "10.200.0.0/24", "InstanceId": "i-0879fa49c49be1a3e", "InstanceOwnerId": "107995894928", "NetworkInterfaceId": "eni-0612e82f1247c6282", "Origin": "CreateRoute", "State": "active" }, { "DestinationCidrBlock": "10.200.1.0/24", "InstanceId": "i-0db245a70483daa43", "InstanceOwnerId": "107995894928", "NetworkInterfaceId": "eni-0db39a19f4f3970f8", "Origin": "CreateRoute", "State": "active" }, { "DestinationCidrBlock": "10.200.2.0/24", "InstanceId": "i-0b93625175de8ee43", "InstanceOwnerId": "107995894928", "NetworkInterfaceId": "eni-0cc95f34f747734d3", "Origin": "CreateRoute", "State": "active" }, { "DestinationCidrBlock": "10.0.0.0/16", "GatewayId": "local", "Origin": "CreateRouteTable", "State": "active" }, { "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": "igw-00d618a99e45fa508", "Origin": "CreateRoute", "State": "active" } ] ]