Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ДЗ20 / Kubernetes. Networks,Storages / Kubernetes-3 #9

Merged
merged 11 commits into from
Oct 14, 2022
Merged

Conversation

hatterfix
Copy link
Collaborator

@hatterfix hatterfix commented Oct 7, 2022

Выполнено ДЗ №20

  • Основное ДЗ Kubernetes. Networks,Storages.
  • Задание со * Kubernetes-манифест для Secret

В процессе сделано:

  • Развернул кластер YC через terraform (конфигурация была подготовлена в предыдущем дз)
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

Outputs:

cluster_external_v4_endpoint = https://51.250.79.106

yc managed-kubernetes cluster get-credentials yc-cluster --external

Context 'yc-yc-cluster' was added as default to kubeconfig '/home/hatter/.kube/config'.
Check connection to cluster using 'kubectl cluster-info --kubeconfig /home/hatter/.kube/config'.

kubectl config current-context
yc-yc-cluster
  • Развернул поды в dev-namespace кластера, перед этим активировав и dashboard
kubectl describe service ui -n dev | grep NodePort
Type:                     NodePort
NodePort:                 <unset>  31102/TCP
 kubectl get nodes -o wide
NAME                        STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP     OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
cl1kik4q2c3b6bjfeepc-afyk   Ready    <none>   15m   v1.23.6   10.10.10.20   51.250.7.35     Ubuntu 20.04.4 LTS   5.4.0-124-generic   containerd://1.6.7
cl1kik4q2c3b6bjfeepc-umop   Ready    <none>   15m   v1.23.6   10.10.10.21   51.250.76.254   Ubuntu 20.04.4 LTS   5.4.0-124-generic   containerd://1.6.7

kubectl get services -n dev
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
comment      ClusterIP   10.96.204.168   <none>        9292/TCP         9m16s
comment-db   ClusterIP   10.96.130.201   <none>        27017/TCP        9m16s
mongodb      ClusterIP   10.96.155.71    <none>        27017/TCP        9m16s
post         ClusterIP   10.96.238.243   <none>        5000/TCP         9m15s
post-db      ClusterIP   10.96.225.158   <none>        27017/TCP        9m16s
ui           NodePort    10.96.145.18    <none>        9292:31102/TCP   9m15s

Приложение работает

Заглушил kube-dns и чекер, отмечу, что kube-dns на данный момент устарел
Вместо него в современных версиях используется coredns

kubectl get all -n kube-system

pod/coredns-786b4cc45f-8h8k7                              1/1     Running   0             25m


kubectl scale deployment --replicas 0 -n kube-system kube-dns-autoscaler
Warning: spec.template.metadata.annotations[scheduler.alpha.kubernetes.io/critical-pod]: non-functional in v1.16+; use the "priorityClassName" field instead
Warning: spec.template.metadata.annotations[seccomp.security.alpha.kubernetes.io/pod]: deprecated since v1.19, non-functional in v1.25+; use the "seccompProfile" field instead
deployment.apps/kube-dns-autoscaler scaled

kubectl scale deployment --replicas 0 -n kube-system coredns
Warning: spec.template.spec.nodeSelector[beta.kubernetes.io/os]: deprecated since v1.14; use "kubernetes.io/os" instead
deployment.apps/coredns scaled

kubectl get all -n kube-system | grep dns
service/kube-dns         ClusterIP   10.96.128.2     <none>        53/UDP,53/TCP   33m
deployment.apps/coredns                              0/0     0            0           32m
deployment.apps/kube-dns-autoscaler                  0/0     0            0           33m
replicaset.apps/coredns-786b4cc45f                              0         0         0       32m
replicaset.apps/kube-dns-autoscaler-5d9767598c                  0         0         0       33m

Убедился что у приложения нет связи с компонентами

Load Balancer

Проверил порты сервиса до модификации

kubectl get service -n dev --selector component=ui
NAME   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
ui     NodePort   10.96.145.18   <none>        9292:31102/TCP   44m

Добавил Load-balancer и проверил снова

ubectl apply -f reddit/ui-service.yml -n dev
service/ui configured

kubectl get service -n dev --selector component=ui
NAME   TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
ui     LoadBalancer   10.96.145.18   51.250.75.202   80:32092/TCP   47m


``

Проверил - приложение доступно  по указанному IP и 80 порту


### Ingress

Установил свежую версию  Ingress по [официальной документации](https://kubernetes.github.io/ingress-nginx/deploy/) из github(https://github.com/kubernetes/ingress-nginx)
т к используется k8s версии 1.23

```sh
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml

---
---
ingressclass.networking.k8s.io/nginx created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission create

Добавил ui-ingress.yml

Конфигурация по методичке выдавала ошибку:

kubectl apply -f reddit/ui-ingress.yml -n dev
error: unable to recognize "reddit/ui-ingress.yml": no matches for kind "Ingress" in version "extensions/v1beta1"

Модифицировал синтаксис в соответствии с актуальными рекомендациями из документации ingress

Также убрал из сервиса ui LoadBalancer

Проверил

kubectl apply -f reddit/ui-ingress.yml -n dev
ingress.networking.k8s.io/ui created


kubectl get ingress -n dev
NAME   CLASS    HOSTS   ADDRESS        PORTS   AGE
ui     <none>   *       IP:51.250.76.223   80      50m

Приложение доступно по 80 порту

Secret & TLS Termination https:

Сгенерировал и загрузил сертификат в кластер

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=51.250.76.223"
Generating a RSA private key
....+++++
......+++++
writing new private key to 'tls.key'

kubectl create secret tls ui-ingress --key tls.key --cert tls.crt -n dev
secret/ui-ingress created

#Проверил

Name:         ui-ingress
Namespace:    dev
Labels:       <none>
Annotations:  <none>

Type:  kubernetes.io/tls

Data
====
tls.crt:  1123 bytes
tls.key:  1704 bytes

Модифицировал ui-ingress для работы с сертификатом

kubectl apply -f reddit/ui-ingress.yml -n dev
ingress.networking.k8s.io/ui configured

Приложение доступно по https

Задание со * Kubernetes-манифест для Secret

Для выполнения использован пример отсюда

Добавил манифест tls.yml

Внутри серты в base64

Удалил действующий сертификат, созданный вручную и подключил сертификат из созданного манифеста

kubectl delete secret ui-ingress -n dev
secret "ui-ingress" deleted


kubectl create -f reddit/tls.yml  -n dev
secret/ui-ingress created

Удалил tls.crt и tls.key т к они более не нужны

Приложение доступно по https

Network Policy

Добавил mongo-network-policy.yml

ubectl apply -f reddit/mongo-network-policy.yml -n dev
networkpolicy.networking.k8s.io/deny-db-traffic created

Применил, сервис post не связывается с базой, чтобы это исправить, необходимо добавить podSelector для post

Закоммичено

Хранилище для базы

#№№ volume

  • Создал mongo-deployment.yml с emptyDir
  • Создал пост в приложении
  • Пересоздал mongo deployment
kubectl delete -f reddit/mongo-deployment.yml -n dev
deployment.apps "mongo" deleted

kubectl apply -f reddit/mongo-deployment.yml -n dev
deployment.apps/mongo created

После запуска пода mongo, созданный ранее пост пропал

PersitentVolume

Создал диск в yc для хранения

yc compute disk create \
--name k8s-kube3 \
--size 4 \
--description "k8s-kube3

yc compute disk list
+----------------------+-----------+-------------+---------------+--------+----------------------+-------------+
|          ID          |   NAME    |    SIZE     |     ZONE      | STATUS |     INSTANCE IDS     | DESCRIPTION |
+----------------------+-----------+-------------+---------------+--------+----------------------+-------------+
| fhmbshmc962np9928q5q |           | 68719476736 | ru-central1-a | READY  | fhmmibiu8pcrs0siqadj |             |
| fhmbvfjke3h952jphkl7 |           | 68719476736 | ru-central1-a | READY  | fhm3vc381bv56e0edbu6 |             |
| fhmg2btle3jreno28vgj | k8s-kube3 |  4294967296 | ru-central1-a | READY  |                      | k8s-kube3   |
+----------------------+-----------+-------------+---------------+--------+----------------------+-------------+

Создал persistent volume mongo-volume.yml (мия файла не указано в методичке - ориентировался по тестам к заданию в github actions)

Аналогично создал PersitentVolumeClaim mongo-claim.yml

Отредактировал mongo-deployment.yml для работы с persistent volume

Применил и пересоздал mongo deployment

kubectl apply -f reddit/mongo-volume.yml -n dev
persistentvolume/mongo-pv create

kubectl apply -f reddit/mongo-claim.yml -n dev 
persistentvolumeclaim/mongo-pvc created

kubectl apply -f reddit/mongo-deployment.yml -n dev
deployment.apps/mongo configured

Добаывил пост и Поересоздал депорй mongo

kubectl delete -f reddit/mongo-deployment.yml -n dev
deployment.apps "mongo" deleted


kubectl apply -f reddit/mongo-deployment.yml -n dev
deployment.apps/mongo created

Посты остаются на месте
add post

PR checklist

  • Выставил label с номером домашнего задания
  • Выставил label с темой домашнего задания

@hatterfix hatterfix changed the title ДЗ20 / Kubernetes. Networks, Storages. /Kubernetes 3 ДЗ20 / Kubernetes. Networks,Storages / Kubernetes-3 Oct 7, 2022
Copy link
Contributor

@mrgreyves mrgreyves left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здравствуйте!)
Да, тут все хорошо
ДЗ принимаю =)

@hatterfix hatterfix merged commit b690705 into main Oct 14, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants