Teste
Vamos executar uma série de tarefas para garantir que seu cluster Kubernetes está funcionando corretamente.
Criptografia
Vamos verificar se esta funcionando a criptografia dos dados secretos imprimindo o dump hex da chave armazenada no ETCD
kubectl create secret generic kubernetes-the-hard-way --from-literal="mykey=mydata"
Demonstração da chave
external_ip=$(aws ec2 describe-instances --filters \ "Name=tag:Name,Values=controller-0" \ "Name=instance-state-name,Values=running" \ --output text --query 'Reservations[].Instances[].PublicIpAddress') ssh -i kubernetes.id_rsa ubuntu@${external_ip}
Atenção: Abra uma nova janela ssh para o controller-0 e execute os comandos abaixo
sudo ETCDCTL_API=3 etcdctl get \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/etcd/ca.pem \ --cert=/etc/etcd/kubernetes.pem \ --key=/etc/etcd/kubernetes-key.pem\ /registry/secrets/default/kubernetes-the-hard-way | hexdump -C exit
Resultado Esperado
00000000 2f 72 65 67 69 73 74 72 79 2f 73 65 63 72 65 74 |/registry/secret| 00000010 73 2f 64 65 66 61 75 6c 74 2f 6b 75 62 65 72 6e |s/default/kubern| 00000020 65 74 65 73 2d 74 68 65 2d 68 61 72 64 2d 77 61 |etes-the-hard-wa| 00000030 79 0a 6b 38 73 3a 65 6e 63 3a 61 65 73 63 62 63 |y.k8s:enc:aescbc| 00000040 3a 76 31 3a 6b 65 79 31 3a b7 1a c3 4f c9 b7 c3 |:v1:key1:...O...| 00000050 65 3a a7 4a e0 68 7b b1 7f ab d2 a7 b1 c3 f5 fe |e:.J.h{.........| 00000060 fc 60 3a b2 aa cd fc c7 d7 1c 8d 75 b0 bd 6c 36 |.`:........u..l6| 00000070 13 dc 0e 20 b9 c8 ed b6 2b ac 5c 17 10 ff 79 40 |... ....+.\...y@| 00000080 19 4f 14 3a 81 59 03 d8 dc 4f 4d a2 b3 1b 1c 4c |.O.:.Y...OM....L| 00000090 dd 02 cf 32 1d b6 38 2c 6d 2e 40 4d 01 a0 ed 7b |...2..8,m.@M...{| 000000a0 53 ff 8e 97 0f 0d 49 13 f1 bf c1 aa 72 26 fb d6 |S.....I.....r&..| 000000b0 99 7a c5 98 55 a8 c1 27 d1 5e ed 6a 39 24 16 d2 |.z..U..'.^.j9$..| 000000c0 60 12 63 cb 3e bf b3 77 5a 55 59 e0 61 03 16 2d |`.c.>..wZUY.a..-| 000000d0 d6 13 22 7c 3e fe a1 56 77 a8 85 6e 28 4d 1d b4 |.."|>..Vw..n(M..| 000000e0 19 55 30 66 cd 08 84 94 cb a6 4d 2b 95 92 61 9b |.U0f......M+..a.| 000000f0 3b ed 1f 2a af 55 c1 ad db ed c8 80 03 28 c6 c4 |;..*.U.......(..| 00000100 78 ba 25 24 5d f3 a1 34 1f 32 0b 25 bd 13 ec 0b |x.%$]..4.2.%....| 00000110 12 21 09 3e bd c8 ec 19 01 3c 21 a8 24 cc d3 19 |.!.>....._!.$...| 00000120 cc 43 4e 95 b4 c9 2b 98 78 ba f2 1e 83 2d c3 98 |.CN...+.x....-..| 00000130 88 eb 85 af df 90 32 a2 a9 8a ec 54 5f 6f f6 01 |......2....T_o..| 00000140 7c ba 3a e9 b4 b3 3b e3 20 0a ||.:...;. .| 0000014a
A chave etcd que foi prefixada com k8s: enc: aescbc: v1: key1, e isto indica que o o mesmo foi foi usado para criptografar os dados com a chave key1.
Atenção: feche a janela ssh do controller-0 e retorne a janela ssh da sua máquina local
Criando um deploy
Vamos verificar se o cluster pode criar e gerenciar implantações.
kubectl create deployment nginx --image=nginx kubectl get pods -l app=nginx
Resultado Esperado
NAME READY STATUS RESTARTS AGE nginx-65899c769f-xkfcn 1/1 Running 0 15s
Port Fowarding
Vamos verificara se podemos acessar aplicativos remotamente usando o port-forward. encaminhando a porta 8080 em sua máquina local para a porta 80 do pod nginx
POD_NAME=$(kubectl get pods -l app=nginx -o jsonpath="{.items[0].metadata.name}") echo "$POD_NAME" kubectl port-forward $POD_NAME 8080:80
Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80
Atenção: abra um novo terminal na sua máquina local e execute o comando abaixo, caso tenha ambiente gráfico você poderá abrir o endereço no seu browser preferido
curl --head http://127.0.0.1:8080
HTTP/1.1 200 OK Server: nginx/1.19.2 Date: Wed, 26 Aug 2020 17:22:59 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 11 Aug 2020 14:50:35 GMT Connection: keep-alive ETag: "5f32b03b-264" Accept-Ranges: bytes
Volte ao terminal anterior na sua máquina local e cancele o comando com CTRL C para cancelar o port-foward e serguir com os testes
Logs
Vamos verificar se conseguimos recuperar logs de contêiners.
kubectl logs $POD_NAME
Resultado Esperado
127.0.0.1 - - [26/Aug/2020:17:22:59 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.29.0" "-"
Executando o pod
Vamos testar se conseguimos executar comandos em um contêiner.
kubectl exec -ti $POD_NAME -- nginx -v
Resultado Esperado
nginx version: nginx/1.19.2
Expondo um Service
Vamos verificar se conseguimos expor aplicativos usando um Serviço.
kubectl expose deployment nginx --port 80 --type NodePort
Obtendo a porta do serviço
NODE_PORT=$(kubectl get svc nginx \ --output=jsonpath='{range .spec.ports[0]}{.nodePort}')
Permitindo acesso remoto ao Serviço
Vamos criar uma regra de firewall que permita acesso remoto à porta do nginx:
aws ec2 authorize-security-group-ingress \ --group-id ${SECURITY_GROUP_ID} \ --protocol tcp \ --port ${NODE_PORT} \ --cidr 0.0.0.0/0
Obtendo o nome da Instância do pod nginx
POD_NAME=$(kubectl get pods -l app=nginx -o jsonpath="{.items[0].metadata.name}") echo "$POD_NAME" INSTANCE_NAME=$(kubectl get pod $POD_NAME --output=jsonpath='{.spec.nodeName}') echo "$INSTANCE_NAME"
Acessando o node pelo IP Externo e a porta
EXTERNAL_IP=$(aws ec2 describe-instances --filters \ "Name=instance-state-name,Values=running" \ "Name=network-interface.private-dns-name,Values=${INSTANCE_NAME}.*.internal*" \ --output text --query 'Reservations[].Instances[].PublicIpAddress') echo "$EXTERNAL_IP" curl -I http://${EXTERNAL_IP}:${NODE_PORT}
HTTP/1.1 200 OK Server: nginx/1.19.2 Date: Wed, 26 Aug 2020 17:28:36 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 11 Aug 2020 14:50:35 GMT Connection: keep-alive ETag: "5f32b03b-264" Accept-Ranges: bytes