После создания системы необходимо немедленно следить за ее эксплуатацией и техническим обслуживанием, поэтому необходима система мониторинга.
Сейчас в Kubernetes одна за другой появляются измониторсистемы.,Например, сейчас очень популярноизPrometheus
、Grafana
、Elastic Stack (ELK)
、 Kubernetes Metrics Server
и т. д.,Они предназначены не только для мониторсистемы,Также используется для отслеживания работоспособности кластера, производительности и использования ресурсов.
Не будем сегодня говорить о вышеперечисленных системах мониторинга. Я хочу поговорить о нативной системе мониторинга в проекте kubernetes — kubernetes. Панель мониторинга, которая предоставляет Web пользовательский интерфейс, который позволяет пользователям графически управлять и контролировать Kubernetes Контейнеризованные приложения в кластерах. Хотя большинство Kubernetes Задачи можно выполнять с помощью инструментов командной строки.kubectl
Заканчивать,но Dashboard Предлагает несколько ключевых преимуществ:
Сказав все это, как установить эту приборную панель? Можно сказать, что установка любого компонента в сетевых Kubernetes очень проста.
Эта панель управления по-прежнему наследует прекрасную традицию установки одной командой:
###Проведите пальцем влево и вправо
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
пример
ubuntu@master:~$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
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
ubuntu@master:~$
Вы можете видеть, что после запуска Apply,создаст файл с именемkubernetes-dashboard
изnamespace,Затем создайте соответствующийизservice
、secret
、configmap
и важноизdeployment
и другой сопутствующий контент。
Запуск происходит очень быстро. Менее чем за минуту POD уже находится в состоянии готовности. По умолчанию создаются сервисы типа ClusterIP:
###Проведите пальцем влево и вправо
ubuntu@master:~$ kubectl get pods,svc -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
pod/dashboard-metrics-scraper-5cb4f4bb9c-x827t 1/1 Running 0 41s
pod/kubernetes-dashboard-6967859bff-hqcqr 1/1 Running 0 41s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes-dashboard ClusterIP 10.43.236.108 <none> 443/TCP 41s
service/dashboard-metrics-scraper ClusterIP 10.43.174.125 <none> 8000/TCP 41s
ubuntu@master:~$
Непосредственно авторизовать свой графический интерфейс.,нужноkubernetes-dashboard
этотservice
делать ремонт,Воляtype
Изменить наNodePort
,После завершения преобразования вы увидите, что его тип — NodePort.,и назначил внешнийPort443:30306/TCP
серединаиз30306
:
###Проведите пальцем влево и вправо
kubectl patch svc kubernetes-dashboard --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]' -n kubernetes-dashboard
пример
ubuntu@master:~$ kubectl patch svc kubernetes-dashboard --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]' -n kubernetes-dashboard
service/kubernetes-dashboard patched
ubuntu@master:~$
ubuntu@master:~$
ubuntu@master:~$ kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.43.174.125 <none> 8000/TCP 92s
kubernetes-dashboard NodePort 10.43.236.108 <none> 443:30306/TCP 92s
ubuntu@master:~$
На данный момент для входа в графический интерфейс еще осталась последняя часть информации — учетные данные: информация для проверки входа. Есть два способа входа в Dashboard: токен и другой — kubeconfig. Условно говоря, токен относительно прост, поэтому токен используется непосредственно в эксперименте.
Создайте ServiceAccount и временный токен в качестве учетных данных для входа в графический интерфейс.
###Проведите пальцем влево и вправо
cat >k3s-dashboard.yaml<<EOF
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
EOF
kubectl create -f k3s-dashboard.yaml
kubectl -n kubernetes-dashboard create token admin-user
пример:
ubuntu@master:~$ kubectl -n kubernetes-dashboard create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6InNLVzY0OHVvZXgyU0pfTXNpRG8zejR2ZUNXbVNrQlp0d0JZbm1lMFF5T1EifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzAyMTM2MzE4LCJpYXQiOjE3MDIxMzI3MTgsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMTBmMmQzNTEtMzdmMC00ZTRiLWEwYWMtMjhmNzJlZWVkN2VmIn19LCJuYmYiOjE3MDIxMzI3MTgsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbi11c2VyIn0.u_Iz8nNF7_HmaTZR2BbjXOo9es6sfdJnmCT6znXfy2tHek-wJyfUnHvUBbGF1efZnEBAk6Z518DWDU88E2Us9Okq7oX4AcVe_Rgk_b78Z2KxgzOMhXjFf4mhY0H9DymNA_Qow_3E4ylU4AM0oumHBHTC6B7kUhnQxSdCVAR5NpKoaLdj3eEY0Bd7ckDr9zJ6sRZYsAJfCZffBug0XSXcxIp1m3QATuW4D18FZo4mMIRfwuive2B48y3QyTDyPkCG6VKw-SYYD_Yj-Oyl2bdvAPCKvjKEfv87Ke_f-hIpgekpevbSokk7xw2hhqrFSQTKAkxslDMCg96JHLaPKFSThg
ubuntu@master:~$
Все готово, начните вход в графический интерфейс, IP — это IP-адрес узла (включая главный, рабочий), Порт — это внешний порт в SVC, а Credential — это токен, напечатанный выше:
Выберите пространство имен как Все пространства имен:
Статистика развертывания:
Из информации об узлах в кластере видно, что мастер четко указан в списке, поэтому было подчеркнуто, что мастер является рабочим узлом с ролью контроллера:
На этом этапе панель управления Kubernetes готова.
Почему здесь этот? Причина в том, что при входе в панель управления вам необходимо временно получить токен, и вам придется каждый раз заполнять длинную строку, что отнимает много времени, трудоемко и хлопотно. Вот я и подумал, как это сделать. Я могу войти в графический интерфейс панели управления в любое время, используя имя пользователя и пароль?
Так что это дикий путь, который я выбрал. Это не официальная рекомендация kubernetes (в нем нет никаких рекомендаций). Его можно использовать только экспериментально для расширения моих идей.
Мое решение — использовать Nginx в качестве обратного прокси-сервера, установить имя пользователя и пароль для входа в Nginx, а затем использовать обратный прокси-сервер для входа в панель управления kubernetes. Конкретный метод заключается в следующем:
Сначала сделайте токен информационной панели постоянным. На предыдущих шагах у токена был срок действия. Если срок его действия истечет, вам придется получить новый токен. Очевидно, что это невозможно, поэтому вам необходимо сделать его постоянным.
###Проведите пальцем влево и вправо
##yaml-файл
cat >k3s-dashboard-secret.yaml<<EOF
apiVersion: v1
kind: Secret
metadata:
name: admin-user
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: "admin-user"
type: kubernetes.io/service-account-token
EOF
### apply yaml
kubectl apply -f k3s-dashboard-secret.yaml
###Получите постоянный изтокен
kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d;echo
пример:
ubuntu@master:~$ kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d;echo
eyJhbGciOiJSUzI1NiIsImtpZCI6InNLVzY0OHVvZXgyU0pfTXNpRG8zejR2ZUNXbVNrQlp0d0JZbm1lMFF5T1EifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhMWVmNTBiNi0zNjYyLTRhN2UtYTBlNi0xZWNkM2E0NWI1NDIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.BI08SEMjg6W-234DIg_sTGVU4Z9zM9FcO0qhSfdumMDtT7sw6ddhYc55FUaXNdp10vCRktFSLbGAJ4UR3z1TPXKikZ4T1pS1cVlviTxX4nJHw9FdiSvsZLmhSB9hDMiPtrL6Mu_C8i6z3VqTgjEGgwv01ZUpGhYPJPmPbzurUNheJxj6Zf5LZcRyfcbwGPhZSmgx7aTK2Z-HNjXGF5tofBoCcN-XYUE9J-mIXZB77m3vz3kA8ar-FTRDo1k8RAc6wdgIhSzGz8fjVXA4SLezHzlo9o6Hj8RPfmAey2Bfzuxz76pXQOP1rah6oB7LjZeGXyqMiKgkKaI2xxMT0uc7bQ
ubuntu@master:~$
Далее идет операционная часть ngnix.
Сначала нужно пройтиhtpasswd
пользователюadmin
Создать файл паролей
###Проведите пальцем влево и вправо
#потому это наш образец На виртуальной машине не установлен Apache, поэтому его необходимо сначала установить.
sudo apt install -y apache2-utils
# Имя пользователя admin, пароль admin, используется для Nginx, имя файла паролей — nginx_htpasswd.
htpasswd -cBb nginx_htpasswd admin admin
Создайте файл, содержащийизфайл паролейизsecret
:
###Проведите пальцем влево и вправо
kubectl create ns nginx
kubectl create secret -n nginx generic basic-auth --from-file=nginx_htpasswd
Следующий контент очень важен,Это определениеnginxобратный проксиизconfigmap
,其серединаnginx.conf
немедленноиз几个参数需要修Изменить на自己实验серединаизценить:
kubernetes-dashboard
этотService
изCLUSTER-IP
и внутренний порт по умолчаниюиз443
。proxy_set_header Authorization "Bearer <постоянныйtoken>
。/etc/nginx/.htpasswd
Вот и все。###Проведите пальцем влево и вправо
cat >nginx-configmap.yaml<<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
namespace: nginx
data:
nginx.conf: |
events {}
http {
server {
listen 80;
location / {
proxy_pass https://192.168.100.106:30306;
proxy_set_header Host \$http_host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_set_header Authorization "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6InNLVzY0OHVvZXgyU0pfTXNpRG8zejR2ZUNXbVNrQlp0d0JZbm1lMFF5T1EifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhMWVmNTBiNi0zNjYyLTRhN2UtYTBlNi0xZWNkM2E0NWI1NDIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.BI08SEMjg6W-234DIg_sTGVU4Z9zM9FcO0qhSfdumMDtT7sw6ddhYc55FUaXNdp10vCRktFSLbGAJ4UR3z1TPXKikZ4T1pS1cVlviTxX4nJHw9FdiSvsZLmhSB9hDMiPtrL6Mu_C8i6z3VqTgjEGgwv01ZUpGhYPJPmPbzurUNheJxj6Zf5LZcRyfcbwGPhZSmgx7aTK2Z-HNjXGF5tofBoCcN-XYUE9J-mIXZB77m3vz3kA8ar-FTRDo1k8RAc6wdgIhSzGz8fjVXA4SLezHzlo9o6Hj8RPfmAey2Bfzuxz76pXQOP1rah6oB7LjZeGXyqMiKgkKaI2xxMT0uc7bQ";
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
}
EOF
kubectl apply -f nginx-configmap.yaml
kubectl get configmaps -n nginx
Следующий шаг — создание NgnixизPod через контроллер развертывания.,其серединаvolumeMounts
Внизиз Два содержания очень важны。Один из них — файл конфигурации,Один из них — Авторизоватьсяngnixиз имени пользователя и пароля.,Конкретное развертывание yaml выглядит следующим образом.,После подготовки подайте заявку напрямую и дождитесь готовности:
###Проведите пальцем влево и вправо
cat >nginx-deployment.yaml<<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-proxy
namespace: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx-proxy
template:
metadata:
labels:
app: nginx-proxy
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: config-volume
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
- name: auth-volume
mountPath: /etc/nginx/.htpasswd
subPath: nginx_htpasswd
volumes:
- name: config-volume
configMap:
name: nginx-config
- name: auth-volume
secret:
secretName: basic-auth
EOF
kubectl apply -f nginx-deployment.yaml
kubectl get pod -n nginx
в то же время,нужно датьnginxСоздайтеService
,并ВоляService
暴漏给внешний可以Авторизоваться,в настоящий моментиз做法是Воляservice
изtype
Изменить наNodePort
,同时也Воля暴漏извнешнийPortЗафиксированный30000
,Предпосылка30000
не другимизservice
занимать:
###Проведите пальцем влево и вправо
cat >nginx-service.yaml<<EOF
apiVersion: v1
kind: Service
metadata:
name: nginx-proxy-service
namespace: nginx
spec:
selector:
app: nginx-proxy
ports:
- protocol: TCP
port: 80
targetPort: 80
EOF
kubectl apply -f nginx-service.yaml
kubectl get svc -n nginx
kubectl patch svc -n nginx nginx-proxy-service --type='json' -p='[{"op": "replace", "path": "/spec/type", "value": "NodePort"}, {"op": "replace", "path": "/spec/ports/0/nodePort", "value": 30000}]'
После прохождения вышеуказанных шагов вы можете использовать IP определенного узла и Nginx. Сервисный внешний порт 30000
Авторизоваться,Вам будет предложено ввести имя пользователя и пароль,Следует отметить, что данный эксперимент требует использования протокола httpиз Авторизоватьсяnginx,Прямо сейчасhttp://<node ip>:30000
:
После входа в систему с правильным именем пользователя и паролем вы автоматически перейдете на панель управления Kubernetes:
Выше описан процесс установки панели управления и использования прокси-сервера nginx. Если у вас есть лучшее решение или идеи, оставьте сообщение в чате!