From 4c4515e0965882e199259d896d8d38a1e9bd84dc Mon Sep 17 00:00:00 2001 From: dannc Date: Tue, 22 Nov 2022 10:46:15 +0700 Subject: [PATCH] homework 12.5: complete all tasks --- readme.md | 1 + .../12-kubernetes/12.4/terraform/.gitignore | 1 + .../12.4/terraform/.terraform.lock.hcl | 9 -- .../12.5/config/frontend-policy.yml | 16 ++ .../12-kubernetes/12.5/config/frontend.yml | 36 +++++ src/homework/12-kubernetes/12.5/readme.md | 144 ++++++++++++++++++ 6 files changed, 198 insertions(+), 9 deletions(-) delete mode 100644 src/homework/12-kubernetes/12.4/terraform/.terraform.lock.hcl create mode 100644 src/homework/12-kubernetes/12.5/config/frontend-policy.yml create mode 100644 src/homework/12-kubernetes/12.5/config/frontend.yml create mode 100644 src/homework/12-kubernetes/12.5/readme.md diff --git a/readme.md b/readme.md index f2cb89e..8fe2a4e 100644 --- a/readme.md +++ b/readme.md @@ -61,3 +61,4 @@ * [12.2. Команды для работы с Kubernetes](/src/homework/12-kubernetes/12.2) * [12.3. Развертывание кластера на собственных серверах, лекция 1](/src/homework/12-kubernetes/12.3) * [12.4. Развертывание кластера на собственных серверах, лекция 2](/src/homework/12-kubernetes/12.4) +* [12.5. Сетевые решения CNI](/src/homework/12-kubernetes/12.5) diff --git a/src/homework/12-kubernetes/12.4/terraform/.gitignore b/src/homework/12-kubernetes/12.4/terraform/.gitignore index 0281c43..3309aee 100644 --- a/src/homework/12-kubernetes/12.4/terraform/.gitignore +++ b/src/homework/12-kubernetes/12.4/terraform/.gitignore @@ -33,5 +33,6 @@ override.tf.json # Ignore CLI configuration files .terraformrc terraform.rc +.terraform.lock.hcl variables.tf diff --git a/src/homework/12-kubernetes/12.4/terraform/.terraform.lock.hcl b/src/homework/12-kubernetes/12.4/terraform/.terraform.lock.hcl deleted file mode 100644 index b2a3f88..0000000 --- a/src/homework/12-kubernetes/12.4/terraform/.terraform.lock.hcl +++ /dev/null @@ -1,9 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/yandex-cloud/yandex" { - version = "0.82.0" - hashes = [ - "h1:TV2paiynRTtVYsUbOgsHR+g6GVbCnXTgvrb4JDmNVzs=", - ] -} diff --git a/src/homework/12-kubernetes/12.5/config/frontend-policy.yml b/src/homework/12-kubernetes/12.5/config/frontend-policy.yml new file mode 100644 index 0000000..43ac7fa --- /dev/null +++ b/src/homework/12-kubernetes/12.5/config/frontend-policy.yml @@ -0,0 +1,16 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: frontend-test-network-policy + namespace: default +spec: + podSelector: + matchLabels: + app: frontend + policyTypes: + - Ingress + ingress: + - ports: + - port: 80 + - port: 443 diff --git a/src/homework/12-kubernetes/12.5/config/frontend.yml b/src/homework/12-kubernetes/12.5/config/frontend.yml new file mode 100644 index 0000000..ef98140 --- /dev/null +++ b/src/homework/12-kubernetes/12.5/config/frontend.yml @@ -0,0 +1,36 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: frontend + name: frontend + namespace: default +spec: + replicas: 1 + selector: + matchLabels: + app: frontend + template: + metadata: + labels: + app: frontend + spec: + containers: + - image: praqma/network-multitool:alpine-extra + imagePullPolicy: IfNotPresent + name: network-multitool + terminationGracePeriodSeconds: 30 + +--- +apiVersion: v1 +kind: Service +metadata: + name: frontend + namespace: default +spec: + ports: + - name: web + port: 80 + selector: + app: frontend diff --git a/src/homework/12-kubernetes/12.5/readme.md b/src/homework/12-kubernetes/12.5/readme.md new file mode 100644 index 0000000..cb3fb3e --- /dev/null +++ b/src/homework/12-kubernetes/12.5/readme.md @@ -0,0 +1,144 @@ +Выполнение [домашнего задания](https://github.com/netology-code/devkub-homeworks/blob/main/12-kubernetes-05-cni.md) +по теме "12.5. Сетевые решения CNI" + +## Q/A + +> После работы с Flannel появилась необходимость обеспечить безопасность для приложения. Для этого лучше всего подойдет Calico. + +### Задание 1 + +> Установить в кластер CNI плагин Calico +> +> Для проверки других сетевых решений стоит поставить отличный от Flannel плагин — например, Calico. Требования: +> * установка производится через ansible/kubespray; +> * после применения следует настроить политику доступа к hello-world извне. Инструкции [kubernetes.io](https://kubernetes.io/docs/concepts/services-networking/network-policies/), [Calico](https://docs.projectcalico.org/about/about-network-policy) + +Значение текущего используемого сетевого плагина для кластера, развёрнутого через `kubespray` +можно посмотреть в inventory-файле `mycluster/group_vars/k8s_cluster/k8s-cluster.yml`. +А именно - это значение ключа `kube_network_plugin`. По умолчанию задан `calico`, поэтому никаких изменений в конфигурацию вносить не нужно. + +Для тестирования создадим в кластере сервис [frontend](./config/frontend.yml): + +```shell +kubectl apply -f frontend.yml +``` + +Предполагается, что необходимо настроить политику доступа из-вне для сервиса `frontend`. +Для этого необходимо создать спецификацию `NetworkPolicy`: [frontend-policy.yml](./config/frontend-policy.yml), +которая говорит о том, что доступ разрешён со всех ресурсов, но только к портам `80` и `443`. + +```shell +kubectl apply -f frontend-policy.yml +``` + +### Задание 2 + +> Изучить, что запущено по умолчанию. +> +> Самый простой способ — проверить командой calicoctl get . +> Для проверки стоит получить список нод, ipPool и profile. +> Требования: +> * установить утилиту calicoctl +> * получить 3 вышеописанных типа в консоли. + +Для установки утилиты необходимо выполнить следующие команды: + +```shell +curl -L https://github.com/projectcalico/calico/releases/download/v3.24.5/calicoctl-linux-amd64 -o calicoctl +chmod +x ./calicoctl +sudo mv calicoctl /usr/local/bin/ +``` + +Для проверки установки: + +```shell +calicoctl version +``` + +```text +Client Version: v3.24.5 +Git commit: f1a1611ac +Cluster Version: v3.23.3 +Cluster Type: kubespray,kubeadm,kdd +``` + +Следующим шагом необходимо получить информацию о сущностях кластера: + +* ноды: + + ```shell + calicoctl get node --allow-version-mismatch + ``` + + ```text + NAME + control + node1 + ``` + +* ipPools: + + ```shell + calicoctl get ipPool --allow-version-mismatch + ``` + + ```text + NAME CIDR SELECTOR + default-pool 10.233.64.0/18 all() + ``` + +* profile: + + ```shell + calicoctl get profile --allow-version-mismatch + ``` + + ```text + NAME + projectcalico-default-allow + kns.default + kns.kube-node-lease + kns.kube-public + kns.kube-system + ksa.default.default + ksa.kube-node-lease.default + ksa.kube-public.default + ksa.kube-system.attachdetach-controller + ksa.kube-system.bootstrap-signer + ksa.kube-system.calico-node + ksa.kube-system.certificate-controller + ksa.kube-system.clusterrole-aggregation-controller + ksa.kube-system.coredns + ksa.kube-system.cronjob-controller + ksa.kube-system.daemon-set-controller + ksa.kube-system.default + ksa.kube-system.deployment-controller + ksa.kube-system.disruption-controller + ksa.kube-system.dns-autoscaler + ksa.kube-system.endpoint-controller + ksa.kube-system.endpointslice-controller + ksa.kube-system.endpointslicemirroring-controller + ksa.kube-system.ephemeral-volume-controller + ksa.kube-system.expand-controller + ksa.kube-system.generic-garbage-collector + ksa.kube-system.horizontal-pod-autoscaler + ksa.kube-system.job-controller + ksa.kube-system.kube-proxy + ksa.kube-system.namespace-controller + ksa.kube-system.node-controller + ksa.kube-system.nodelocaldns + ksa.kube-system.persistent-volume-binder + ksa.kube-system.pod-garbage-collector + ksa.kube-system.pv-protection-controller + ksa.kube-system.pvc-protection-controller + ksa.kube-system.replicaset-controller + ksa.kube-system.replication-controller + ksa.kube-system.resourcequota-controller + ksa.kube-system.root-ca-cert-publisher + ksa.kube-system.service-account-controller + ksa.kube-system.service-controller + ksa.kube-system.statefulset-controller + ksa.kube-system.token-cleaner + ksa.kube-system.ttl-after-finished-controller + ksa.kube-system.ttl-controller + ```