Skip to content

Latest commit

 

History

History
executable file
·
225 lines (163 loc) · 9.34 KB

16.Smoke-Test.md

File metadata and controls

executable file
·
225 lines (163 loc) · 9.34 KB

Smoke Test

Etcd Data Encryption

İlk testimizde bir secret oluşturup daha sonra oluşturduğumuz secret'ı etcd' den okuyacağız. Burada verilerimizin veri tabanında şifrelenerek tutulduğunu görmüş olacağız (encrypt secret data at rest.).

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

etcd nin çalıştığı controller makinalarından birine bağlanıp alttaki komutu çalıştırıyoruz.

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

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 1e 39 5c cf b8 86 25  |:v1:key1:.9\...%|
00000050  49 7d c5 6f 3b a4 13 99  b2 b2 f5 2f c6 09 73 d2  |I}.o;....../..s.|
00000060  90 77 52 ab 35 2e e8 0a  22 5f 83 bd 50 5e ec c2  |.wR.5..."_..P^..|
00000070  55 af 75 03 90 93 16 e3  2e 2d 45 f0 78 a1 db ef  |U.u......-E.x...|
00000080  dd 6f 18 14 6f de 87 9a  5a 2c 18 5e 26 98 4d a5  |.o..o...Z,.^&.M.|
00000090  17 56 d0 0c 5c 93 26 aa  e3 cd 8d 49 e1 63 2b b5  |.V..\.&....I.c+.|
000000a0  bd c6 f0 65 0b 3a ca ab  bc 2c 4d fb ba 43 37 1c  |...e.:...,M..C7.|
000000b0  90 d5 f4 06 9d 3e ed 4a  75 13 ab 83 49 92 59 43  |.....>.Ju...I.YC|
000000c0  a7 ab 2c 8b a1 15 3f 78  5c d8 98 c6 2d b1 30 59  |..,...?x\...-.0Y|
000000d0  8c 96 19 86 57 a6 fd 9d  2e e5 f7 b5 35 fc 29 17  |....W.......5.).|
000000e0  3f 90 7e d4 ae 81 6e ad  0c d8 7e 38 ed 35 49 0d  |?.~...n...~8.5I.|
000000f0  45 dc 54 3e 54 89 5c 78  a1 82 3f 36 f1 c9 9a 1e  |E.T>T.\x..?6....|
00000100  cd f2 d9 11 2a 8d 45 12  90 fc 4a 15 ac b7 22 2f  |....*.E...J..."/|
00000110  e0 f8 18 33 6b da c6 12  ce a7 9e 0b 56 58 d5 9b  |...3k.......VX..|
00000120  6c 14 62 37 11 d2 f3 32  ca 95 4d 3c 55 da 77 a8  |l.b7...2..M<U.w.|
00000130  6d 1b 98 5b 96 64 a6 84  9f 29 e5 12 62 e7 1f bc  |m..[.d...)..b...|
00000140  83 f8 a4 56 b1 dd bc 4f  8c 4c fb ac 3e fc 80 fe  |...V...O.L..>...|
00000150  c3 0b 7a 45 c0 39 69 80  c9 0a                    |..zE.9i...|
0000015a

Aynı sonucu eğer LXC ile çalışıyorsak host makinamızda aşağıdaki şekilde çalıştırarak da alabiliriz.

 lxc exec --env ETCDCTL_API=3 controller-01 -- 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
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 1e 39 5c cf b8 86 25  |:v1:key1:.9\...%|
00000050  49 7d c5 6f 3b a4 13 99  b2 b2 f5 2f c6 09 73 d2  |I}.o;....../..s.|
00000060  90 77 52 ab 35 2e e8 0a  22 5f 83 bd 50 5e ec c2  |.wR.5..."_..P^..|
00000070  55 af 75 03 90 93 16 e3  2e 2d 45 f0 78 a1 db ef  |U.u......-E.x...|
00000080  dd 6f 18 14 6f de 87 9a  5a 2c 18 5e 26 98 4d a5  |.o..o...Z,.^&.M.|
00000090  17 56 d0 0c 5c 93 26 aa  e3 cd 8d 49 e1 63 2b b5  |.V..\.&....I.c+.|
000000a0  bd c6 f0 65 0b 3a ca ab  bc 2c 4d fb ba 43 37 1c  |...e.:...,M..C7.|
000000b0  90 d5 f4 06 9d 3e ed 4a  75 13 ab 83 49 92 59 43  |.....>.Ju...I.YC|
000000c0  a7 ab 2c 8b a1 15 3f 78  5c d8 98 c6 2d b1 30 59  |..,...?x\...-.0Y|
000000d0  8c 96 19 86 57 a6 fd 9d  2e e5 f7 b5 35 fc 29 17  |....W.......5.).|
000000e0  3f 90 7e d4 ae 81 6e ad  0c d8 7e 38 ed 35 49 0d  |?.~...n...~8.5I.|
000000f0  45 dc 54 3e 54 89 5c 78  a1 82 3f 36 f1 c9 9a 1e  |E.T>T.\x..?6....|
00000100  cd f2 d9 11 2a 8d 45 12  90 fc 4a 15 ac b7 22 2f  |....*.E...J..."/|
00000110  e0 f8 18 33 6b da c6 12  ce a7 9e 0b 56 58 d5 9b  |...3k.......VX..|
00000120  6c 14 62 37 11 d2 f3 32  ca 95 4d 3c 55 da 77 a8  |l.b7...2..M<U.w.|
00000130  6d 1b 98 5b 96 64 a6 84  9f 29 e5 12 62 e7 1f bc  |m..[.d...)..b...|
00000140  83 f8 a4 56 b1 dd bc 4f  8c 4c fb ac 3e fc 80 fe  |...V...O.L..>...|
00000150  c3 0b 7a 45 c0 39 69 80  c9 0a                    |..zE.9i...|
0000015a

Deployments

Nginx web server deployment yaparak pod'un oluşup oluşmadığını kontrol edeceğiz.

kubectl create deployment nginx --image=nginx

# sonuç
deployment.apps/nginx created



kubectl get pods -l app=nginx

#sonuç

NAME                     READY   STATUS              RESTARTS   AGE
nginx-6799fc88d8-d5glm   0/1     ContainerCreating   0          26s

Port Forwarding

Deploy ettiğimiz nginx sunucusuna host makinamızdan kubetcl yardımıyla port yönlendirmesi ile ulaşmayı deneyeceğiz.

Bu test için ikinci terminale ihtiyacımız olacak. Forwarding yapılırken diğer terminalde siteyi çağırıyor olacağız. Tabiiki browser üzerinden de test yapılabilir.

Birinci terminal

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

kubectl port-forward $POD_NAME 8080:80

# sonuç

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

Birinci terminal açık iken ikinci terminalden sayfayı çağırıyoruz.

curl --head http://127.0.0.1:8080

HTTP/1.1 200 OK
Server: nginx/1.21.0
Date: Tue, 15 Jun 2021 18:32:42 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 25 May 2021 12:28:56 GMT
Connection: keep-alive
ETag: "60aced88-264"
Accept-Ranges: bytes

Bu esnada birinci terminale şu satırların Handling connection for 8080 eklendiğini görebilirsiniz.

Logs

Oluşturduğumuz nginx web sunucusunun loglarını inceliyoruz.

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

kubectl logs $POD_NAME
# Sonuç

127.0.0.1 - - [15/Jun/2021:18:32:42 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.76.1" "-"
127.0.0.1 - - [15/Jun/2021:18:32:54 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4521.0 Safari/537.36 Edg/93.0.910.5" "-"
2021/06/15 18:32:54 [error] 45#45: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "127.0.0.1:8080", referrer: "http://127.0.0.1:8080/"

Exec

Oluşturduğumuz nginx sunucusu içinde komut çalıştırıyoruz.

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

kubectl exec -ti $POD_NAME -- nginx -v

# sonuç

nginx version: nginx/1.21.0

Servisler

Bu bölümde uygulamaları servis üzerinden erişebilir yapmayı deneyeceğiz.

Nginx web sunucumuzu NordPort ile erişime açacağız. Öncelikle uygulamamızı servis olarak yayına veriyoruz. Daha sonra Kubernetes'in vermiş olduğu port numarasını öğrenip worker makinalarımızdan birinin ip'si ile bu porta istek gönderiyoruz.

aynı ip ve portu kullanarak browser'dan da test edilebilir.

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

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

echo $NODE_PORT
#sonuç

30588

curl -I http://10.240.10.7:$NODE_PORT
HTTP/1.1 200 OK
Server: nginx/1.21.0
Date: Tue, 15 Jun 2021 18:51:41 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 25 May 2021 12:28:56 GMT
Connection: keep-alive
ETag: "60aced88-264"
Accept-Ranges: bytes