mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 15:22:37 +03:00
homework 14.3: complete all tasks
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
10
src/homework/14-kubernetes-security/14.3/config/nginx.conf
Normal file
10
src/homework/14-kubernetes-security/14.3/config/nginx.conf
Normal 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/;
|
||||
}
|
||||
}
|
||||
50
src/homework/14-kubernetes-security/14.3/config/test_pod.yml
Normal file
50
src/homework/14-kubernetes-security/14.3/config/test_pod.yml
Normal 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
|
||||
203
src/homework/14-kubernetes-security/14.3/readme.md
Normal file
203
src/homework/14-kubernetes-security/14.3/readme.md
Normal 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}
|
||||
```
|
||||
Reference in New Issue
Block a user