From 96cabba22c6cd36acdcc59c171e4968eef21f411 Mon Sep 17 00:00:00 2001 From: dannc Date: Tue, 17 Jan 2023 10:41:50 +0700 Subject: [PATCH] homework 14.5: complete all tasks --- readme.md | 10 +- .../14.5/config/example-network-policy.yml | 35 +++++++ .../14.5/config/example-security-context.yml | 14 +++ .../14.5/config/restricted-pods.yml | 46 +++++++++ .../14-kubernetes-security/14.5/readme.md | 99 +++++++++++++++++++ 5 files changed, 199 insertions(+), 5 deletions(-) create mode 100644 src/homework/14-kubernetes-security/14.5/config/example-network-policy.yml create mode 100644 src/homework/14-kubernetes-security/14.5/config/example-security-context.yml create mode 100644 src/homework/14-kubernetes-security/14.5/config/restricted-pods.yml create mode 100644 src/homework/14-kubernetes-security/14.5/readme.md diff --git a/readme.md b/readme.md index 710c9d5..6c29940 100644 --- a/readme.md +++ b/readme.md @@ -62,11 +62,11 @@ * [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) -* [13.1. контейнеры, поды, deployment, statefulset, services, endpoints](/src/homework/13-kubernetes-config/13.1) -* [13.2. разделы и монтирование](/src/homework/13-kubernetes-config/13.2) -* [13.3. работа с kubectl](/src/homework/13-kubernetes-config/13.3) -* [13.4. инструменты для упрощения написания конфигурационных файлов. Helm и Jsonnet](/src/homework/13-kubernetes-config/13.4) -* [13.5. поддержка нескольких окружений на примере Qbec](/src/homework/13-kubernetes-config/13.5) +* [13.1. Контейнеры, поды, deployment, statefulset, services, endpoints](/src/homework/13-kubernetes-config/13.1) +* [13.2. Разделы и монтирование](/src/homework/13-kubernetes-config/13.2) +* [13.3. Работа с kubectl](/src/homework/13-kubernetes-config/13.3) +* [13.4. Инструменты для упрощения написания конфигурационных файлов. Helm и Jsonnet](/src/homework/13-kubernetes-config/13.4) +* [13.5. Поддержка нескольких окружений на примере Qbec](/src/homework/13-kubernetes-config/13.5) * [14.1. Создание и использование секретов](/src/homework/14-kubernetes-security/14.1) * [14.2. Синхронизация секретов с внешними сервисами. Vault](/src/homework/14-kubernetes-security/14.2) * [14.3. Карты конфигураций](/src/homework/14-kubernetes-security/14.3) diff --git a/src/homework/14-kubernetes-security/14.5/config/example-network-policy.yml b/src/homework/14-kubernetes-security/14.5/config/example-network-policy.yml new file mode 100644 index 0000000..6c1cd53 --- /dev/null +++ b/src/homework/14-kubernetes-security/14.5/config/example-network-policy.yml @@ -0,0 +1,35 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: test-network-policy + namespace: default +spec: + podSelector: + matchLabels: + role: db + policyTypes: + - Ingress + - Egress + ingress: + - from: + - ipBlock: + cidr: 172.17.0.0/16 + except: + - 172.17.1.0/24 + - namespaceSelector: + matchLabels: + project: myproject + - podSelector: + matchLabels: + role: frontend + ports: + - protocol: TCP + port: 6379 + egress: + - to: + - ipBlock: + cidr: 10.0.0.0/24 + ports: + - protocol: TCP + port: 5978 diff --git a/src/homework/14-kubernetes-security/14.5/config/example-security-context.yml b/src/homework/14-kubernetes-security/14.5/config/example-security-context.yml new file mode 100644 index 0000000..ad40485 --- /dev/null +++ b/src/homework/14-kubernetes-security/14.5/config/example-security-context.yml @@ -0,0 +1,14 @@ +--- +apiVersion: v1 +kind: Pod +metadata: + name: security-context-demo +spec: + containers: + - name: sec-ctx-demo + image: fedora:latest + command: [ "id" ] + # command: [ "sh", "-c", "sleep 1h" ] + securityContext: + runAsUser: 1000 + runAsGroup: 3000 diff --git a/src/homework/14-kubernetes-security/14.5/config/restricted-pods.yml b/src/homework/14-kubernetes-security/14.5/config/restricted-pods.yml new file mode 100644 index 0000000..9a3575f --- /dev/null +++ b/src/homework/14-kubernetes-security/14.5/config/restricted-pods.yml @@ -0,0 +1,46 @@ +--- +apiVersion: v1 +kind: Pod +metadata: + labels: + app: test + role: outer + name: test-pod-outer +spec: + containers: + - image: praqma/network-multitool:alpine-extra + imagePullPolicy: IfNotPresent + name: test-container +--- +apiVersion: v1 +kind: Pod +metadata: + labels: + app: test + role: inner + name: test-pod-inner +spec: + containers: + - image: praqma/network-multitool:alpine-extra + imagePullPolicy: IfNotPresent + name: test-container +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: test-network-policy-inner +spec: + podSelector: + matchLabels: + role: inner + policyTypes: + - Egress + egress: + - to: + - podSelector: + matchLabels: + app: test + role: outer + ports: + - port: 80 + - port: 443 diff --git a/src/homework/14-kubernetes-security/14.5/readme.md b/src/homework/14-kubernetes-security/14.5/readme.md new file mode 100644 index 0000000..b5792f8 --- /dev/null +++ b/src/homework/14-kubernetes-security/14.5/readme.md @@ -0,0 +1,99 @@ +Выполнение [домашнего задания](https://github.com/netology-code/clokub-homeworks/blob/clokub-5/14.5.md) +по теме "14.5. SecurityContext, NetworkPolicies" + +## Q/A + +### Задача 1 + +> Рассмотрите пример [config/example-security-context.yml](./config/example-security-context.yml) + +> Создайте модуль +> ```shell +> kubectl apply -f config/example-security-context.yml +> ``` + +```text +pod/security-context-demo created +``` + +> Проверьте установленные настройки внутри контейнера +> +> ```shell +> kubectl logs security-context-demo +> ``` + +```text +uid=1000 gid=3000 groups=3000 +``` + +### Задание 2 + +> Рассмотрите пример [config/example-network-policy.yml](./config/example-network-policy.yml). +> +> Создайте два модуля. Для первого модуля разрешите доступ к внешнему миру и ко второму контейнеру. +> Для второго модуля разрешите связь только с первым контейнером. Проверьте корректность настроек. + +Создание подов и правил для второго пода описаны в конфигурации [config/restricted-pods.yml](./config/restricted-pods.yml). + +Необходимо применить данный конфиг: + +```shell +kubectl apply -f config/restricted-pods.yml +``` + +```text +pod/test-pod-outer created +pod/test-pod-inner created +networkpolicy.networking.k8s.io/test-network-policy-inner created +``` + +Проверить, что поды успешно создались: + +```shell +kubectl get pod +``` + +```text +NAME READY STATUS RESTARTS AGE +test-pod-inner 1/1 Running 0 59s +test-pod-outer 1/1 Running 0 59s +``` + +Затем необходимо проверить, что из контейнера пода `test-pod-outer` доступен как внешние ресурсы (например, `google.com`), +так и контейнер пода `test-pod-inner`. IP-адрес контейнера необходимо получить заранее, например, +через выполнение команды `kubectl describe pod test-pod-inner`. + +```shell +kubectl exec -it pods/test-pod-inner -- sh +curl -sS -D - -o /dev/null https://google.com +curl -sS -D - -o /dev/null http://10.233.102.132 +``` + +```text +HTTP/2 301 +<...> + +HTTP/1.1 200 OK +<...> +``` + +Следующим шагом необходимо проверить, что контейнер пода `test-pod-inner` имеет доступ только до контейнера пода `test-pod-outer`: + +```shell +kubectl exec -it pods/test-pod-inner -- sh +curl -sS -D - -o /dev/null http://10.233.102.131 +curl -sS -D - -o /dev/null https://google.com +``` + +```text +HTTP/1.1 200 OK +<...> + +curl: (6) Could not resolve host: google.com +``` + +PS. Использованные флаги для `curl`: +* `-s` - silent, не выводить никакую информацию о запросе +* `-S` - show-errors, несмотря на флаг `-s` выводит информацию об ошибке, если такая произошла при запросе. +* `-D` - dump-headers, вывести заголовки ответа в файл. Если указать в качестве пути `-`, то вывод будет произведён в stdout. +* `-o` - output, вывести тело запроса в файл. В данном случае в `/dev/null`.