K8S The Hard Way 10/10 - Smoke Test

Tue, Mar 2, 2021 3-minute read

Smoke Test

Neste laboratório, você executará uma série de tarefas para garantir que seu cluster Kubernetes esteja funcionando corretamente.

Criptografia de Dados

Nesta seção, você verificará a capacidade de criptografar dados secretos em repouso.

Crie um segredo genérico:

kubectl create secret generic kubernetes-the-hard-way \
  --from-literal="mykey=mydata"

Imprima um hexdump do segredo do kubernetes-the-hard-way armazenado no etcd:

 vagrant ssh controller-0 \
  --command "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"

A chave etcd deve ser prefixada com k8s:enc:aescbc:v1:key1, que indica que o provedor aescbc foi usado para criptografar os dados com a chave de criptografia key1.

Deployments

Nesta seção, você verificará a capacidade de criar e gerenciar Deployments.

Crie uma Deployments para um servidor web nginx:

kubectl create deployment nginx --image=nginx

Liste o pod criado pelo deployment do nginx:

kubectl get pods -l app=nginx

Resultado

NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-kpn5m   1/1     Running   0          10s

Port Forwarding

Nesta seção, você verificará a capacidade de acessar aplicativos remotamente usando o encaminhamento de porta.

Recupere o nome completo do pod nginx:

POD_NAME=$(kubectl get pods -l app=nginx -o jsonpath="{.items[0].metadata.name}")

Encaminhe a porta 8080 em sua máquina local para a porta 80 do pod nginx:

kubectl port-forward $POD_NAME 8080:80

Resultado

Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80

Em um novo terminal, faça uma solicitação HTTP usando o endereço de encaminhamento:

curl --head http://127.0.0.1:8080

Resultado

HTTP/1.1 200 OK
Server: nginx/1.19.1
Date: Sat, 18 Jul 2020 07:14:00 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 07 Jul 2020 15:52:25 GMT
Connection: keep-alive
ETag: "5f049a39-264"
Accept-Ranges: bytes

Volte para o terminal anterior e interrompa o encaminhamento de portas para o pod nginx:

Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
Handling connection for 8080
^C

Logs

Nesta seção, você verificará a capacidade de recuperar logs de container.

Imprima os logs do pod nginx:

kubectl logs $POD_NAME

Resultado

...
127.0.0.1 - - [18/Jul/2020:07:14:00 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.64.0" "-"

Services

Nesta seção, você verificará a capacidade de expor aplicativos usando Services.

Exponha um deployment do nginx usando um service NodePort:

kubectl expose deployment nginx --port 80 --type NodePort

O tipo de serviço LoadBalancer não pode ser usado porque seu cluster não está configurado com integração de provedor de nuvem. Configurar a integração do provedor de nuvem está fora do escopo deste tutorial.

Recupere a porta do nod atribuída pelo service nginx:

NODE_PORT=$(kubectl get svc nginx \
  --output=jsonpath='{range .spec.ports[0]}{.nodePort}')

Recupere o endereço IP di worker onde está rodando o pod nginx:

curl -I http://<NODE_IP>:${NODE_PORT}

output

HTTP/1.1 200 OK
Server: nginx/1.19.1
Date: Sat, 18 Jul 2020 07:16:41 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 07 Jul 2020 15:52:25 GMT
Connection: keep-alive
ETag: "5f049a39-264"
Accept-Ranges: bytes

Limpando tudo:

Com o nosso smoke test finalizado podemos remover td!;

sudo vagrant destroy -f

Limpando o diretório:

rm -r ~/vagrant-vm/kubernetes-the-hard-way