homework 14.5: complete all tasks

This commit is contained in:
2023-01-17 10:41:50 +07:00
parent 5b9daf3457
commit 96cabba22c
5 changed files with 199 additions and 5 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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`.