homework 14.3: complete all tasks

This commit is contained in:
2022-12-29 10:25:38 +07:00
parent 4270c65a26
commit caad4499bf
7 changed files with 340 additions and 2 deletions

View File

@@ -68,4 +68,5 @@
* [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.2. Синхронизация секретов с внешними сервисами. Vault](/src/homework/14-kubernetes-security/14.2)
* [14.3. Карты конфигураций](/src/homework/14-kubernetes-security/14.3)

View File

@@ -1,5 +1,5 @@
Выполнение [домашнего задания](https://github.com/netology-code/clokub-homeworks/blob/clokub-5/14.2.md)
по теме "14.2 Синхронизация секретов с внешними сервисами. Vault"
по теме "14.2. Синхронизация секретов с внешними сервисами. Vault"
## Q/A

View File

@@ -0,0 +1,54 @@
{
"apiVersion": "v1",
"items": [
{
"apiVersion": "v1",
"data": {
"name": "netology.ru"
},
"kind": "ConfigMap",
"metadata": {
"creationTimestamp": "2022-12-29T03:11:33Z",
"name": "domain",
"namespace": "default",
"resourceVersion": "712",
"uid": "2e6bb329-e5f9-42c5-80d1-b8624b7f9a67"
}
},
{
"apiVersion": "v1",
"data": {
"ca.crt": "-----BEGIN CERTIFICATE-----\nMIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwptaW5p\na3ViZUNBMB4XDTIyMTIyODAzMDI0MVoXDTMyMTIyNjAzMDI0MVowFTETMBEGA1UE\nAxMKbWluaWt1YmVDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM34\nAUZIANcvNE1YiyMmxh+E3428vGfAIcNdXSYxLY19GFvplQSHz5/fnsUd1fmFBYg9\ntJeJHxjwTGLQtAFkcX0stgNO2AC1IpVHo2DFSeQqXIdQ0ibpXBZPV3/FwdrUxz1x\nFEKaP6SO+OMcoEtyuHiTT+gnnGGYp4SD745FKaXUoIfhd0RoP/9MO57vv3/5WdBg\n3ioY0+3N4j5LFrIM3HVH1s4GU47MO6l8MnItQkZKJwg8DvPNBHorS66wVooE9jRk\nCOd3M09TjspM+iufGexl3TlTybvAjbUX26gcS6pgROD1mKyVpubHc4ji7lPduTSr\nK9FFj3fcnwgWNoenhwsCAwEAAaNhMF8wDgYDVR0PAQH/BAQDAgKkMB0GA1UdJQQW\nMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW\nBBTGW/hzQPfiVnIuh0XZez6fcRE5mzANBgkqhkiG9w0BAQsFAAOCAQEAZcCYq9LY\nQjfWp6UTzeqf97Egg6Mmx8rvRkd2+cKSbeMrRZLwpBHgMDQqYolwyMzDZP3/jEaE\ngQ9sEw/trce8aDalHe0g2wUnl4g0qJqGHDu7D3PE+GsymLr6rA2XAdaiKG8z0wxx\nImQB1fFecuMgZb1RCbLnGD/vUzcG0uLHphEbWv9sgU8TUsiRrRO7uSIyaIKTgoyU\nfv6rb38anA0ikKYQDdhEU4sEJNDE0VWgbpJek9AwnNWZiogMst/+fU3//sb14mh/\n8S1MeJLOHHgEF3sxGHv1nFHLajV5WMtcR9uJV6fkRIEl2EfnJbUSb4RfaJchEXbO\n4/v9V5XNnoEjDg\u003d\u003d\n-----END CERTIFICATE-----\n"
},
"kind": "ConfigMap",
"metadata": {
"annotations": {
"kubernetes.io/description": "Contains a CA bundle that can be used to verify the kube-apiserver when using internal endpoints such as the internal service IP or kubernetes.default.svc. No other usage is guaranteed across distributions of Kubernetes clusters."
},
"creationTimestamp": "2022-12-29T03:03:23Z",
"name": "kube-root-ca.crt",
"namespace": "default",
"resourceVersion": "332",
"uid": "24b389ea-2f88-4777-a755-53858d758e50"
}
},
{
"apiVersion": "v1",
"data": {
"nginx.conf": "server {\n listen 80;\n server_name netology.ru www.netology.ru;\n access_log /var/log/nginx/domains/netology.ru-access.log main;\n error_log /var/log/nginx/domains/netology.ru-error.log info;\n location / {\n include proxy_params;\n proxy_pass http://10.10.10.10:8080/;\n }\n}\n"
},
"kind": "ConfigMap",
"metadata": {
"creationTimestamp": "2022-12-29T03:11:21Z",
"name": "nginx-config",
"namespace": "default",
"resourceVersion": "703",
"uid": "8dfa9f4c-6d89-4fbf-b3f6-1cd87b16710b"
}
}
],
"kind": "List",
"metadata": {
"resourceVersion": ""
}
}

View File

@@ -0,0 +1,20 @@
apiVersion: v1
data:
nginx.conf: |
server {
listen 80;
server_name netology.ru www.netology.ru;
access_log /var/log/nginx/domains/netology.ru-access.log main;
error_log /var/log/nginx/domains/netology.ru-error.log info;
location / {
include proxy_params;
proxy_pass http://10.10.10.10:8080/;
}
}
kind: ConfigMap
metadata:
creationTimestamp: "2022-12-29T03:11:21Z"
name: nginx-config
namespace: default
resourceVersion: "703"
uid: 8dfa9f4c-6d89-4fbf-b3f6-1cd87b16710b

View File

@@ -0,0 +1,10 @@
server {
listen 80;
server_name netology.ru www.netology.ru;
access_log /var/log/nginx/domains/netology.ru-access.log main;
error_log /var/log/nginx/domains/netology.ru-error.log info;
location / {
include proxy_params;
proxy_pass http://10.10.10.10:8080/;
}
}

View File

@@ -0,0 +1,50 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: test-env-config
labels:
app: test
data:
SOME_USER: user
SOME_PASSWORD: passwd
---
apiVersion: v1
kind: ConfigMap
metadata:
name: test-file-config
labels:
app: test
data:
foo.json: |
{"foo": "bar", "baz": 123}
---
apiVersion: v1
kind: Pod
metadata:
labels:
app: test
name: test-pod
namespace: default
spec:
containers:
- image: praqma/network-multitool:alpine-extra
imagePullPolicy: IfNotPresent
name: test-container
env:
- name: SOME_NGINX_USER
valueFrom:
configMapKeyRef:
name: test-env-config
key: SOME_USER
envFrom:
- configMapRef:
name: test-env-config
volumeMounts:
- mountPath: "/opt/config"
name: "config"
readOnly: true
volumes:
- name: "config"
configMap:
name: test-file-config

View File

@@ -0,0 +1,203 @@
Выполнение [домашнего задания](https://github.com/netology-code/clokub-homeworks/blob/clokub-5/14.3.md)
по теме "14.3. Карты конфигураций"
## Q/A
### Задача 1
> Выполните приведённые команды в консоли. Получите вывод команд. Сохраните
> задачу 1 как справочный материал.
> #### Как создать карту конфигураций?
>
> ```
> kubectl create configmap nginx-config --from-file=config/nginx.conf
> kubectl create configmap domain --from-literal=name=netology.ru
> ```
```text
configmap/nginx-config created
configmap/domain created
```
> #### Как просмотреть список карт конфигураций?
>
> ```
> kubectl get configmap
> ```
```text
NAME DATA AGE
domain 1 15s
kube-root-ca.crt 1 8m25s
nginx-config 1 27s
```
> #### Как просмотреть карту конфигурации?
>
> ```
> kubectl get configmap nginx-config
> kubectl describe configmap domain
> ```
```text
NAME DATA AGE
nginx-config 1 39s
```
```text
Name: domain
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
name:
----
netology.ru
BinaryData
====
Events: <none>
```
> #### Как получить информацию в формате YAML и/или JSON?
>
> ```
> kubectl get configmap nginx-config -o yaml
> kubectl get configmap domain -o json
> ```
```yaml
apiVersion: v1
data:
nginx.conf: |
server {
listen 80;
server_name netology.ru www.netology.ru;
access_log /var/log/nginx/domains/netology.ru-access.log main;
error_log /var/log/nginx/domains/netology.ru-error.log info;
location / {
include proxy_params;
proxy_pass http://10.10.10.10:8080/;
}
}
kind: ConfigMap
metadata:
creationTimestamp: "2022-12-29T03:11:21Z"
name: nginx-config
namespace: default
resourceVersion: "703"
uid: 8dfa9f4c-6d89-4fbf-b3f6-1cd87b16710b
```
```json
{
"apiVersion": "v1",
"data": {
"name": "netology.ru"
},
"kind": "ConfigMap",
"metadata": {
"creationTimestamp": "2022-12-29T03:11:33Z",
"name": "domain",
"namespace": "default",
"resourceVersion": "712",
"uid": "2e6bb329-e5f9-42c5-80d1-b8624b7f9a67"
}
}
```
> #### Как выгрузить карту конфигурации и сохранить его в файл?
>
> ```
> kubectl get configmaps -o json > config/configmaps.json
> kubectl get configmap nginx-config -o yaml > config/nginx-config.yml
> ```
Файлы:
* [configmaps.json](./config/configmaps.json)
* [nginx-config.yml](./config/nginx-config.yml)
> #### Как удалить карту конфигурации?
>
> ```
> kubectl delete configmap nginx-config
> ```
```text
configmap "nginx-config" deleted
```
> ### Как загрузить карту конфигурации из файла?
>
> ```
> kubectl apply -f config/nginx-config.yml
> ```
```text
configmap/nginx-config created
```
### Задача 2
> Выбрать любимый образ контейнера, подключить карты конфигураций и проверить
> их доступность как в виде переменных окружения, так и в виде примонтированного
> тома.
За основу будет взят образ `praqma/network-multitool`. В рамках конфигурации [test_pod.yml](./config/test_pod.yml)
описаны два `ConfigMap`: один для значений переменных окружения, второй - для файла. Затем они используются в рамках
конфигурации пода.
Применение конфигурации:
```shell
kubectl apply -f config/test_pod.yml
kubectl get pods
```
```text
configmap/test-env-config created
configmap/test-file-config created
pod/test-pod created
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 21s
```
Проверка, что переменные окружения присутствуют в контейнере:
```shell
kubectl exec -it pod/test-pod -- printenv | grep SOME
```
```shell
SOME_PASSWORD=passwd
SOME_USER=user
SOME_NGINX_USER=user
```
Проверка, что успешно создан файл по `ConfigMap` внутри контейнера:
```shell
kubectl exec -it pod/test-pod -- ls -la /opt/config
```
```text
total 12
drwxrwxrwx 3 root root 4096 Dec 29 03:23 .
drwxr-xr-x 1 root root 4096 Dec 29 03:23 ..
drwxr-xr-x 2 root root 4096 Dec 29 03:23 ..2022_12_29_03_23_06.2057404337
lrwxrwxrwx 1 root root 32 Dec 29 03:23 ..data -> ..2022_12_29_03_23_06.2057404337
lrwxrwxrwx 1 root root 15 Dec 29 03:23 foo.json -> ..data/foo.json
```
```shell
kubectl exec -it pod/test-pod -- cat /opt/config/foo.json
```
```text
{"foo": "bar", "baz": 123}
```