İ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
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
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.
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/"
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
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
- Giriş ve Lab Ortamının Kurulması
- İstemci Araçlarının Kurulumu
- Harici Yük Dengeleyici Kurulumu
- Certificate Authority ve TLS Sertifikalarının Oluşturulması
- Kubeconfig Dosyalarının Oluşturulması
- Data Encryption Config ve Key Oluşturulması
- Etcd Cluster Kurulumu
- Control Plane'nin Kurulumu ve Konfigürasyonu
- Worker Node'ların Kurulumu ve Konfigürasyonu
- Uzak Bağlantı için Kubectl Konfigürasyonu
- Pod Network Route'larının Ayarlanması
- DNS'in Kurulumu ve Konfigürasyonu
- Smoke Test