Bu adım adım kılavuz, Kubernetes kontrol panelini Ubuntu 22.04/20.04’e kurmanın kolay bir yolunu sunar. Kubernetes Dashboard’u Ubuntu 22.04/20.04’e yüklemek, Kubernetes kümelerinizi verimli bir şekilde yönetmenize ve izlemenize olanak tanıyan basit bir işlemdir.
Kubernetes Dashboard’u Ubuntu 22.04/20.04’e Kurmak
Önkoşullar
Kubernetes kontrol panelini kurmak için bir işlev Kubernetes kümesine sahip olmanız gerekir.
Ubuntu’da Kubernetes kümesinin nasıl kurulacağına ilişkin önceki kılavuzumuza göz atabilirsiniz.
Kubernetes Dashboard’u Küme Sunucusuna Yükleme
Çoklu bir kümeniz varsa Kubernetes kontrol panelini kontrol düzleminden kurmanız önerilir.
Bu nedenle K8s kümesi ana düğümünde Kubernetes kontrol panelini yüklemek için aşağıdaki komutu çalıştırın.
VER değişkeninin değerini Kubernetes kontrol panelinin geçerli yayın sürümüyle değiştirin.
VER=2.7.0
VER=2.7.0 && kubectl apply -f \
https://raw.githubusercontent.com/kubernetes/dashboard/v${VER}/aio/deploy/recommended.yaml
Örnek kurulum çıktısı;
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
Kontrol Paneli Kurulumunu Doğrulayın
Kontrol paneli yükleme komutu, kubernetes-dashboard adı verilen bir ad alanı altında Kubernetes kontrol paneli ve kontrol paneli ölçümleriyle ilgili Pod’lar oluşturacaktır.
kubectl get namespaces
NAME STATUS AGE
calico-apiserver Active 17h
calico-system Active 17h
default Active 18h
kube-node-lease Active 18h
kube-public Active 18h
kube-system Active 18h
kubernetes-dashboard Active 3m33s
tigera-operator Active 17h
Bu ad alanındaki pod’ları aşağıdaki gibi görüntüleyebilirsiniz;
kubectl get pods -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-5cb4f4bb9c-k2fjk 1/1 Running 0 2m46s
kubernetes-dashboard-6967859bff-qtm52 1/1 Running 0 2m46s
Bir bölmenin hangi düğümde çalıştığını öğrenmek istiyorsanız -o geniş seçeneğini kullanın.
kubectl get pods -n kubernetes-dashboard -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
dashboard-metrics-scraper-5cb4f4bb9c-qj4cx 1/1 Running 0 44m 10.100.196.133 node01 <none> <none>
kubernetes-dashboard-6967859bff-2ftjt 1/1 Running 0 44m 10.100.186.197 node03 <none> <none>
Aşağıdaki komutu çalıştırarak Kubernetes kontrol paneli hakkında daha fazla ayrıntıya ulaşabilirsiniz;
kubectl describe pod kubernetes-dashboard-6967859bff-qtm52 -n kubernetes-dashboard
Name: kubernetes-dashboard-6967859bff-qtm52
Namespace: kubernetes-dashboard
Priority: 0
Service Account: kubernetes-dashboard
Node: node01/192.168.56.120
Start Time: Sun, 21 May 2023 13:15:52 +0000
Labels: k8s-app=kubernetes-dashboard
pod-template-hash=6967859bff
Annotations: cni.projectcalico.org/containerID: 60184809005e6b9197f13b6587042b10ff659f6a55e5e56ff71c0d77aa5ab168
cni.projectcalico.org/podIP: 10.100.196.132/32
cni.projectcalico.org/podIPs: 10.100.196.132/32
Status: Running
SeccompProfile: RuntimeDefault
IP: 10.100.196.132
IPs:
IP: 10.100.196.132
Controlled By: ReplicaSet/kubernetes-dashboard-6967859bff
Containers:
kubernetes-dashboard:
Container ID: containerd://f6055806fbe4dcbcd94c30201b3c8bfab1c536e4b5ba5e5dc17cfbf247e8ae46
Image: kubernetesui/dashboard:v2.7.0
Image ID: docker.io/kubernetesui/dashboard@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93
Port: 8443/TCP
Host Port: 0/TCP
Args:
--auto-generate-certificates
--namespace=kubernetes-dashboard
State: Running
Started: Sun, 21 May 2023 13:16:45 +0000
Ready: True
Restart Count: 0
Liveness: http-get https://:8443/ delay=30s timeout=30s period=10s #success=1 #failure=3
Environment:
Mounts:
/certs from kubernetes-dashboard-certs (rw)
/tmp from tmp-volume (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-667hl (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kubernetes-dashboard-certs:
Type: Secret (a volume populated by a Secret)
SecretName: kubernetes-dashboard-certs
Optional: false
tmp-volume:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit:
kube-api-access-667hl:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional:
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: kubernetes.io/os=linux
Tolerations: node-role.kubernetes.io/master:NoSchedule
node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 6m6s default-scheduler Successfully assigned kubernetes-dashboard/kubernetes-dashboard-6967859bff-qtm52 to node01
Normal Pulling 6m4s kubelet Pulling image "kubernetesui/dashboard:v2.7.0"
Normal Pulled 5m13s kubelet Successfully pulled image "kubernetesui/dashboard:v2.7.0" in 50.912542693s (50.912558356s including waiting)
Normal Created 5m13s kubelet Created container kubernetes-dashboard
Normal Started 5m13s kubelet Started container kubernetes-dashboard
Harici Erişim için Kubernetes Kontrol Panelini Açığa Çıkarın
Kubernetes kontrol panelinin kurulumu aynı zamanda Kubernetes kontrol paneli uygulamasının ağda gösterilmesinden sorumlu olan bir hizmet de oluşturur.
kubectl get services -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.109.231.10 <none> 8000/TCP 12m
kubernetes-dashboard ClusterIP 10.110.200.227 <none> 443/TCP 12m
Kubernetes hizmetinin ağdaki bir uygulamayı kullanıma sunmasının farklı yolları vardır. En yaygın olanları;
ClusterIP
– Bu, varsayılan hizmet türüdür ve uygulamayı kümedeki dahili bir IP adresinde kullanıma sunar. Bu tür hizmete yalnızca küme içinden erişilebilir.NodePort
– Bu hizmet türü, uygulamayı NAT kullanarak kümedeki seçilen her Düğümün aynı bağlantı noktasında kullanıma sunar. Bu, <NodeIP>:<NodePort> kullanılarak hizmetin küme dışından erişilebilir olmasını sağlar. Varsayılan NodePort aralığı 30000-32767’dir.LoadBalancer
– Bu hizmet türü, mevcut bulutta (destekleniyorsa) harici bir yük dengeleyici oluşturur ve hizmete sabit, harici bir IP atar. Bu, hizmete harici IP adresi kullanılarak küme dışından erişilebilmesini sağlar. Harici IP adresi bulut sağlayıcı tarafından atanır ve Kubernetes tarafından yönetilmez.
Varsayılan olarak Kubernetes kontrol paneli, ClusterIP hizmet türü aracılığıyla kullanıma sunulur ve bu nedenle yalnızca küme içinden erişilebilir.
Kubernetes kontrol paneline kolayca erişebilmek için, uygulamayı NodePort hizmet türü aracılığıyla gösterecek şekilde hizmeti yeniden yapılandıracağım.
kubectl edit service kubernetes-dashboard -n kubernetes-dashboard
Varsayılan olarak Kubernetes kontrol paneli bu şekilde ayarlanır;
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kubernetes-dashboard"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
creationTimestamp: "2023-05-21T13:15:52Z"
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
resourceVersion: "28313"
uid: c70844c4-3795-4491-9986-3dab8c1090d2
spec:
clusterIP: 10.110.200.227
clusterIPs:
- 10.110.200.227
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- port: 443
protocol: TCP
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
Bu hizmeti güncelleyeceğiz ve hizmet türünü ClusterIP’den NodePort’a değiştirip statik Node bağlantı noktasına bağlayacağız.
Spec: bölümünün altına şunu ekledik;
nodePort: 30001
under ports.- changed
type: ClusterIP
totype: NodePort
.
...
spec:
clusterIP: 10.110.200.227
clusterIPs:
- 10.110.200.227
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- port: 443
protocol: TCP
targetPort: 8443
nodePort: 30001
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
Kümedeki bir hizmet tarafından halihazırda kullanılmakta olan bir düğüm bağlantı noktasını atamadığınızdan emin olun.
Aşağıdaki komutu kullanarak şu anda hangi Node portlarının kullanımda olduğunu kontrol edebilirsiniz;
kubectl get services --all-namespaces -o jsonpath='{range .items[*]}{.spec.ports[*].nodePort}{"\n"}{end}'
Hizmeti kaydedin ve çıkın.
Değişiklikler otomatik olarak uygulanacaktır. Hizmeti tekrar kontrol ederek onaylayabilirsiniz;
kubectl get services -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.109.231.10 <none> 8000/TCP 44m
kubernetes-dashboard NodePort 10.110.200.227 <none> 443:30001/TCP 44m
Tür artık NodePort olarak değiştirildi ve dahili bağlantı noktası 443, herhangi bir küme düğümünün IP’leri aracılığıyla erişilebilen bağlantı noktası 30001/tcp ile eşlendi.
Kubernetes Kontrol Paneli Yönetici Kullanıcı Hesabı Oluşturun
Kullanıcı oluşturun ve yönetici dosyalarını atayın
Kubernetes kontrol paneli varsayılan kullanıcı hesabıyla birlikte gelmez. Yönetici kullanıcı hesabı oluşturmak için aşağıdaki gibi bir hizmet hesabı manifest dosyası oluşturun;
vim kubernetes-dashboard-admin-user.yml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
Hesabı oluşturun;
kubectl apply -f kubernetes-dashboard-admin.yml
Aşağıdaki komutu kullanarak hizmet hesaplarını listeleyebilirsiniz;
kubectl get serviceaccounts -n kubernetes-dashboard
Erişim Token Oluşturma
Hizmet hesabı, Kubernetes kontrol panelinde oturum açmak için kullanılabilecek bir belirteç gerektirir. Yukarıda oluşturduğumuz dashadmin servis hesabına token oluşturmak için aşağıdaki komutu çalıştırın;
kubectl create token admin-user -n kubernetes-dashboard
Böyle bir dize elde edeceksiniz;
eyJhbGciOiJSUzI1NiIsImtpZCI6IkVad2xuTHZFb0RSZ3VxazJObHRUeUpTV1cya0l6a21KRERvSmZTNG9aQzgifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjg0NzM3MjYzLCJpYXQiOjE2ODQ3MzM2NjMsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiOGJhZWVkYjQtMGMyOC00MDY1LTgxZDctZjY4MTk2YzBiNWFjIn19LCJuYmYiOjE2ODQ3MzM2NjMsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.u_rFMGQPfWKybODPMfnZNnB8HeycXo5cTfB1ga4RXNE4YMZcmRv6nTseNtz4CvgQEvAMAGdgG0BaZSdUPMx1aiUTNwf4mxF3O8n9E4P7z_6kE0NnbWDg14j9jJpAKfN7G_EIY7fngTQ4_5L94teLWKBYKnwlSL2aZCVPtTQ5IlCcO8YHM8AZaoHxMdBICMY_doiWwxLRsXVMNc3FcdQN6W88ALupB9r8RPIEkqyxFcQLK0pofCsX2QImSyV4VNxyiMhQ9x-ONJIYyz0pVehiXQUGqWHUI8y05VAYZzjWIMOEEjn3oA00zc3gvp01Z17t-vAh9JMYfqE92zBruSFc2w
Kubernetes Kontrol Paneline Erişim
Artık Kubernetes kontrol panelinize, 30001/tcp bağlantı noktasındaki kümedeki herhangi bir düğüm IP’sini ve HTTPS, https://Node-IP:30001’i kullanarak tarayıcınızdan erişebilirsiniz.
Elbette güvenli olmayan SSL sertifikası kullanımını kabul edin ve devam edin.
Token’ı seçin ve yukarıda oluşturulan token’ı yapıştırın ve oturum açmaya devam edin.
Ve işte gidiyorsun! Kubernetes kontrol paneline iniş,
Artık kümenizi Kubernetes kontrol panelinden yönetebilmelisiniz. Daha fazlasını keşfedin!
Yazının orijinalini buradan okuyabilirsiniz.