This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
доступ_к_приложениям_в_bare-metal_kubernetes [2024/03/17 06:13] val [Шаг 10. Использование Helm репозитория для развертывания http приложения] |
доступ_к_приложениям_в_bare-metal_kubernetes [2024/04/04 08:20] (current) val [Шаг 1. Исходные данные] |
||
---|---|---|---|
Line 14: | Line 14: | ||
===== Запись вебинара ===== | ===== Запись вебинара ===== | ||
- | * Будет здесь!!! | + | * https://youtu.be/oIczkkD-hOU |
* Тэги: Kubernetes, LoadBalancer, ClusterIP, MetalLB, Nginx, Keepalived, Ingress-Nginx, Helm, HAProxy, ArgoCD, Dashboard | * Тэги: Kubernetes, LoadBalancer, ClusterIP, MetalLB, Nginx, Keepalived, Ingress-Nginx, Helm, HAProxy, ArgoCD, Dashboard | ||
Line 21: | Line 21: | ||
* В процессе прохождения курса [[DevOps2. Использование Kubernetes]] в конце лабораторной работы 5.3 обнаружено, что кластер kubernetes, развернутый kubespray не поддерживает insecure-registry | * В процессе прохождения курса [[DevOps2. Использование Kubernetes]] в конце лабораторной работы 5.3 обнаружено, что кластер kubernetes, развернутый kubespray не поддерживает insecure-registry | ||
* Вместо решения, описанного в последнем фрагменте видео выбираем альтернативный вариант | * Вместо решения, описанного в последнем фрагменте видео выбираем альтернативный вариант | ||
- | |||
- | ==== Вернуть обратно ==== | ||
- | |||
- | * 1. Удалить gowebd с kube | ||
- | <code> | ||
- | kube1:~# kubectl delete -f application.yaml | ||
- | |||
- | kube1:~# kubectl delete ns my-ns | ||
- | |||
- | kube1:~# rm application.yaml | ||
- | |||
- | kube1:~# crictl rmi server.corp13.un:5000/student/gowebd:ver1.1 | ||
- | |||
- | kube1:~# crictl rmi server.corp13.un:5000/student/gowebd:ver1.2 | ||
- | </code> | ||
- | * 2. Удалить [[Система Kubernetes#Kubernetes Dashboard]] и Argo CD | ||
- | <code> | ||
- | kube1:~# kubectl delete -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml | ||
- | |||
- | kube1:~# kubectl delete ns argocd | ||
- | |||
- | cmder> rm -rf ~/.kube/ | ||
- | |||
- | cmder> rm /usr/bin/kubectl.exe | ||
- | </code> | ||
- | * 3. Удалить ingress-nginx и Helm с kube1 | ||
- | <code> | ||
- | kube1:~# helm delete ingress-nginx --namespace ingress-nginx | ||
- | |||
- | kube1:~# kubectl delete ns ingress-nginx | ||
- | |||
- | kube1:~# rm -r helm* linux-amd64/ /usr/local/bin/helm | ||
- | |||
- | kube1:~# rm -r gowebd/ ingress-nginx/ | ||
- | </code> | ||
- | * 4. Удалить корневые сертификаты с kubeN | ||
- | <code> | ||
- | kubeN# | ||
- | rm /usr/local/share/ca-certificates/ca.crt /etc/ssl/certs/ca.pem | ||
- | update-ca-certificates | ||
- | systemctl restart containerd | ||
- | </code> | ||
- | * 5. Удалить манифесты и сертификаты проекта gowebd с kube1 | ||
- | <code> | ||
- | kube1:~# rm gowebd.crt gowebd.key my-ingress.yaml my-webd-service.yaml my-webd-deployment.yaml | ||
- | </code> | ||
- | * 6. Удалить VM client2 и gate2 | ||
- | * 7. Перезагрузить gate.isp.un | ||
- | * 8. Восстановить из снапшотов gate и server | ||
- | * 9. Удалить каталог, которого не было в курсе | ||
- | <code> | ||
- | server# rm -rf /var/www/ | ||
- | </code> | ||
===== Шаг 1. Исходные данные ===== | ===== Шаг 1. Исходные данные ===== | ||
Line 82: | Line 29: | ||
~/kubespray# time ansible-playbook -i inventory/mycluster/hosts.yaml reset.yml | ~/kubespray# time ansible-playbook -i inventory/mycluster/hosts.yaml reset.yml | ||
- | ~/kubespray# cp -rfp inventory/sample/* inventory/mycluster | + | ~/kubespray# git checkout origin/release-2.22 |
+ | |||
+ | ~/kubespray# time pip3 install -r requirements.txt | ||
+ | |||
+ | ~/kubespray# cp -rvfpT inventory/sample inventory/mycluster | ||
~/kubespray# time ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml | ~/kubespray# time ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml | ||
Line 171: | Line 122: | ||
</code> | </code> | ||
+ | * Тестируем отказоустойчивость, отключая узлы kubeN | ||
===== Шаг 6. Делаем отказоустойчивым gate ===== | ===== Шаг 6. Делаем отказоустойчивым gate ===== | ||
Line 226: | Line 178: | ||
gate2# ifconfig eth0 inet 192.168.13.22 | gate2# ifconfig eth0 inet 192.168.13.22 | ||
- | gate1# ssh-keygen | + | server# |
+ | ssh-copy-id gate1 | ||
+ | ssh-copy-id gate2 | ||
- | gate1# ssh-copy-id gate2 | + | server# |
- | + | scp -3 gate1:/etc/network/interfaces gate2:/etc/network/ | |
- | gate1# | + | scp -3 gate1:/etc/resolv.conf gate2:/etc/ |
- | scp /etc/network/interfaces gate2:/etc/network/ | + | scp -3 gate1:/etc/sysctl.conf gate2:/etc/ |
- | scp /etc/resolv.conf gate2:/etc/ | + | |
- | scp /etc/sysctl.conf gate2:/etc/ | + | |
gate2# hostnamectl set-hostname gate2.corp13.un | gate2# hostnamectl set-hostname gate2.corp13.un | ||
Line 243: | Line 195: | ||
gate2# apt update && apt install keepalived nginx -y | gate2# apt update && apt install keepalived nginx -y | ||
- | gate1# | + | server# |
- | scp /etc/keepalived/keepalived.conf gate2:/etc/keepalived/ | + | scp -3 gate1:/etc/keepalived/keepalived.conf gate2:/etc/keepalived/ |
- | scp /etc/nginx/sites-available/gowebd gate2:/etc/nginx/sites-available/gowebd | + | scp -3 gate1:/etc/nginx/sites-available/gowebd gate2:/etc/nginx/sites-available/gowebd |
- | scp /etc/nginx/sites-enabled/gowebd gate2:/etc/nginx/sites-enabled/gowebd | + | scp -3 gate1:/etc/nginx/sites-enabled/gowebd gate2:/etc/nginx/sites-enabled/gowebd |
- | scp gowebd.* gate2: | + | scp -3 gate1:gowebd.* gate2: |
gate2# cat /etc/keepalived/keepalived.conf | gate2# cat /etc/keepalived/keepalived.conf | ||
Line 255: | Line 207: | ||
* Сервис Nginx [[Сервис HTTP#Подключение, тестирование, применение и мониторинг конфигурации]] | * Сервис Nginx [[Сервис HTTP#Подключение, тестирование, применение и мониторинг конфигурации]] | ||
<code> | <code> | ||
- | server# ssh gate2 | + | server# ssh gate1 tail -f /var/log/nginx/access.log |
- | + | ||
- | gate2# tail -f /var/log/messages | + | |
- | gate2# tail -f /var/log/nginx/access.log | + | server# ssh gate2 tail -f /var/log/messages |
</code> | </code> | ||
* Обсуждаем достоинства (все работает) и недостатки (учет IP адресов в ПО версии 0.14.3 :) | * Обсуждаем достоинства (все работает) и недостатки (учет IP адресов в ПО версии 0.14.3 :) | ||
- | * Если есь время и желание выполняем Шаг 6.2. | + | * Если есть время и желание выполняем [[#Шаг 6.2. Закрываем доступ в сеть кластера]] |
===== Шаг 7. Заменяем nginx на ingress-nginx ===== | ===== Шаг 7. Заменяем nginx на ingress-nginx ===== | ||
Line 287: | Line 237: | ||
<code> | <code> | ||
- | kube1:~# curl https://kubeN/ -H "Host: gowebd.corpX.un" -k | + | $ curl --connect-to "":"":kubeN:443 https://gowebd.corpX.un #-vk |
</code> | </code> | ||
Line 333: | Line 283: | ||
* [[Решение HAProxy]] | * [[Решение HAProxy]] | ||
<code> | <code> | ||
- | gate1# ssh gate2 apt install haproxy | + | server# ssh gate2 apt install haproxy |
- | gate1# | + | server# |
- | scp /etc/ssl/private/* gate2:/etc/ssl/private/ | + | scp -3 gate1:/etc/ssl/private/* gate2:/etc/ssl/private/ |
- | scp /etc/haproxy/haproxy.cfg gate2:/etc/haproxy/haproxy.cfg | + | scp -3 gate1:/etc/haproxy/haproxy.cfg gate2:/etc/haproxy/haproxy.cfg |
ssh gate2 service haproxy restart | ssh gate2 service haproxy restart | ||
+ | |||
+ | server# ssh gateN tail -f /var/log/haproxy.log | ||
</code> | </code> | ||
Line 355: | Line 307: | ||
<code> | <code> | ||
cmder> kubectl port-forward -n my-ns services/my-webd-webd-chart 1234:80 | cmder> kubectl port-forward -n my-ns services/my-webd-webd-chart 1234:80 | ||
- | |||
- | http://localhost:1234/ | ||
</code> | </code> | ||
+ | |||
+ | * http://localhost:1234/ | ||
* Меняем в файле проекта gowebd-k8s/webd-chart/Chart.yaml версию образа и ждем обновление через argocd | * Меняем в файле проекта gowebd-k8s/webd-chart/Chart.yaml версию образа и ждем обновление через argocd | ||
Line 367: | Line 319: | ||
* Подключаемся через [[Система Kubernetes#kubectl proxy]] к нашему приложению | * Подключаемся через [[Система Kubernetes#kubectl proxy]] к нашему приложению | ||
- | <code> | + | * http://localhost:8001/api/v1/namespaces/my-ns/services/my-webd-webd-chart:80/proxy/ |
- | http://localhost:8001/api/v1/namespaces/my-ns/services/my-webd-webd-chart:80/proxy/ | + | |
- | </code> | + | |
Line 377: | Line 327: | ||
<code> | <code> | ||
- | gate1# cp /etc/ssl/private/wild.crtkey /etc/ssl/private/gowebd.crtkey | + | gate1# |
- | gate1# cp /etc/ssl/private/wild.crtkey /etc/ssl/private/keycloak.crtkey | + | cp /etc/ssl/private/wild.crtkey /etc/ssl/private/gowebd.crtkey |
+ | cp /etc/ssl/private/wild.crtkey /etc/ssl/private/keycloak.crtkey | ||
gate1# cat /etc/haproxy/haproxy.cfg | gate1# cat /etc/haproxy/haproxy.cfg | ||
Line 385: | Line 336: | ||
gate1# service haproxy restart | gate1# service haproxy restart | ||
- | gate1# scp /etc/haproxy/haproxy.cfg gate2:/etc/haproxy/haproxy.cfg | + | server# |
- | gate1# scp /etc/ssl/private/* gate2:/etc/ssl/private/ | + | scp -3 gate1:/etc/haproxy/haproxy.cfg gate2:/etc/haproxy/haproxy.cfg |
- | gate1# ssh gate2 service haproxy restart | + | scp -3 gate1:/etc/ssl/private/* gate2:/etc/ssl/private/ |
+ | ssh gate2 service haproxy restart | ||
</code> | </code> | ||
Line 405: | Line 357: | ||
</code><code> | </code><code> | ||
iptables -t nat --flush | iptables -t nat --flush | ||
- | iptables -t nat -A POSTROUTING -o eth1 -s 192.168.13.0/24 -j SNAT --to-source 172.16.1.13 | + | iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.16.1.13 |
iptables -t nat -A PREROUTING -i eth1 --destination 172.16.1.13 -p udp --dport 53 -j DNAT --to-destination 192.168.13.10:53 | iptables -t nat -A PREROUTING -i eth1 --destination 172.16.1.13 -p udp --dport 53 -j DNAT --to-destination 192.168.13.10:53 | ||
+ | |||
+ | iptables --flush | ||
+ | iptables -A FORWARD -i eth0 -j ACCEPT | ||
+ | iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | ||
+ | iptables -A FORWARD -i eth1 -p udp -d 192.168.13.10 --dport 53 -j ACCEPT | ||
+ | iptables -A FORWARD -j DROP | ||
+ | |||
conntrack -F | conntrack -F | ||
netfilter-persistent save | netfilter-persistent save | ||
- | </code><code> | ||
- | gate.isp.un:~# ip route del 192.168.13.0/24 | ||
</code> | </code> | ||
* Настраиваем win client2 dns: 172.16.1.13 | * Настраиваем win client2 dns: 172.16.1.13 | ||
+ | ===== Как все вернуть обратно ===== | ||
+ | |||
+ | * 1. Удалить gowebd с kube | ||
+ | <code> | ||
+ | kube1:~# kubectl delete -f application.yaml | ||
+ | |||
+ | kube1:~# kubectl delete ns my-ns | ||
+ | |||
+ | kube1:~# rm application.yaml | ||
+ | |||
+ | kube1:~# crictl rmi server.corp13.un:5000/student/gowebd:ver1.1 | ||
+ | |||
+ | kube1:~# crictl rmi server.corp13.un:5000/student/gowebd:ver1.2 | ||
+ | </code> | ||
+ | * 2. Удалить [[Система Kubernetes#Kubernetes Dashboard]] и Argo CD | ||
+ | <code> | ||
+ | kube1:~# kubectl delete -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml | ||
+ | |||
+ | kube1:~# kubectl delete ns argocd | ||
+ | |||
+ | cmder> rm -rf ~/.kube/ | ||
+ | |||
+ | cmder> rm /usr/bin/kubectl.exe | ||
+ | </code> | ||
+ | * 3. Удалить ingress-nginx и Helm с kube1 | ||
+ | <code> | ||
+ | kube1:~# helm delete ingress-nginx --namespace ingress-nginx | ||
+ | |||
+ | kube1:~# kubectl delete ns ingress-nginx | ||
+ | |||
+ | kube1:~# rm -r helm* linux-amd64/ /usr/local/bin/helm | ||
+ | |||
+ | kube1:~# rm -r gowebd/ ingress-nginx/ | ||
+ | </code> | ||
+ | * 4. Удалить корневые сертификаты с kubeN | ||
+ | <code> | ||
+ | kubeN# | ||
+ | rm /usr/local/share/ca-certificates/ca.crt /etc/ssl/certs/ca.pem | ||
+ | update-ca-certificates | ||
+ | systemctl restart containerd | ||
+ | </code> | ||
+ | * 5. Удалить манифесты и сертификаты проекта gowebd с kube1 | ||
+ | <code> | ||
+ | kube1:~# rm gowebd.crt gowebd.key my-ingress.yaml my-webd-service.yaml my-webd-deployment.yaml | ||
+ | </code> | ||
+ | * 6. Удалить VM client2 и gate2 | ||
+ | * 7. Перезагрузить gate.isp.un | ||
+ | * 8. Восстановить из снапшотов gate и server | ||
+ | * 9. Удалить, чего не было в курсе | ||
+ | <code> | ||
+ | server# rm -rf /var/www/ | ||
+ | |||
+ | server# rm server.key | ||
+ | </code> |