mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 23:32:37 +03:00
homework 14.5: complete all tasks
This commit is contained in:
10
readme.md
10
readme.md
@@ -62,11 +62,11 @@
|
|||||||
* [12.3. Развертывание кластера на собственных серверах, лекция 1](/src/homework/12-kubernetes/12.3)
|
* [12.3. Развертывание кластера на собственных серверах, лекция 1](/src/homework/12-kubernetes/12.3)
|
||||||
* [12.4. Развертывание кластера на собственных серверах, лекция 2](/src/homework/12-kubernetes/12.4)
|
* [12.4. Развертывание кластера на собственных серверах, лекция 2](/src/homework/12-kubernetes/12.4)
|
||||||
* [12.5. Сетевые решения CNI](/src/homework/12-kubernetes/12.5)
|
* [12.5. Сетевые решения CNI](/src/homework/12-kubernetes/12.5)
|
||||||
* [13.1. контейнеры, поды, deployment, statefulset, services, endpoints](/src/homework/13-kubernetes-config/13.1)
|
* [13.1. Контейнеры, поды, deployment, statefulset, services, endpoints](/src/homework/13-kubernetes-config/13.1)
|
||||||
* [13.2. разделы и монтирование](/src/homework/13-kubernetes-config/13.2)
|
* [13.2. Разделы и монтирование](/src/homework/13-kubernetes-config/13.2)
|
||||||
* [13.3. работа с kubectl](/src/homework/13-kubernetes-config/13.3)
|
* [13.3. Работа с kubectl](/src/homework/13-kubernetes-config/13.3)
|
||||||
* [13.4. инструменты для упрощения написания конфигурационных файлов. Helm и Jsonnet](/src/homework/13-kubernetes-config/13.4)
|
* [13.4. Инструменты для упрощения написания конфигурационных файлов. Helm и Jsonnet](/src/homework/13-kubernetes-config/13.4)
|
||||||
* [13.5. поддержка нескольких окружений на примере Qbec](/src/homework/13-kubernetes-config/13.5)
|
* [13.5. Поддержка нескольких окружений на примере Qbec](/src/homework/13-kubernetes-config/13.5)
|
||||||
* [14.1. Создание и использование секретов](/src/homework/14-kubernetes-security/14.1)
|
* [14.1. Создание и использование секретов](/src/homework/14-kubernetes-security/14.1)
|
||||||
* [14.2. Синхронизация секретов с внешними сервисами. Vault](/src/homework/14-kubernetes-security/14.2)
|
* [14.2. Синхронизация секретов с внешними сервисами. Vault](/src/homework/14-kubernetes-security/14.2)
|
||||||
* [14.3. Карты конфигураций](/src/homework/14-kubernetes-security/14.3)
|
* [14.3. Карты конфигураций](/src/homework/14-kubernetes-security/14.3)
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
99
src/homework/14-kubernetes-security/14.5/readme.md
Normal file
99
src/homework/14-kubernetes-security/14.5/readme.md
Normal file
@@ -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`.
|
||||||
Reference in New Issue
Block a user