Екзамен CKA: Мережеві політики

текст перекладу
Це мій перший пост. Сподіваюся, вам сподобається контент.

Що таке Network Policies у Kubernetes?

NetworkPolicy — це ресурс Kubernetes, що використовується для контролю комунікацій між подами, просторами імен та зовнішніми мережами. Уявіть це як брандмауер для ваших подів.

За замовчуванням Kubernetes дозволяє весь трафік між подами. Хоча це робить підключення зручним, це велика загроза безпеці в реальних сценаріях, де різні поди обробляють чутливі та не чутливі дані.

Завдання: Будь ласка, дотримуйтесь цього посилання
https://github.com/piyushsachdeva/CKA-2024/blob/main/Resources/Day26/task.md

Фронтенд застосунок може підключатися до бекенд застосунку, але не до бази даних.

Створіть файл app.yaml, який містить YAML файли для розгортання та сервісів для фронтенду, бекенду та бази даних.

apiVersion: apps/v1  
kind: Deployment  
metadata:  
 name: frontend-deployment  
 labels:  
 app: frontend  
spec:  
 replicas: 1  
 selector:  
 matchLabels:  
 app: frontend  
 template:  
 metadata:  
 labels:  
 app: frontend  
 spec:  
 containers:  
 - name: frontend  
 image: nginx  
 ports:  
 - containerPort: 80  

---  
apiVersion: v1  
kind: Service  
metadata:  
 name: frontend-service  
spec:  
 type: NodePort  
 selector:  
 app: frontend  
 ports:  
 - port: 80  
 targetPort: 80  
 nodePort: 30007  
---  
apiVersion: apps/v1  
kind: Deployment  
metadata:  
 name: backend-deployment  
 labels:  
 app: backend  
spec:  
 replicas: 1  
 selector:  
 matchLabels:  
 app: backend  
 template:  
 metadata:  
 labels:  
 app: backend  
 spec:  
 containers:  
 - name: nginx  
 image: nginx  
 ports:  
 - containerPort: 80  
---  
apiVersion: v1  
kind: Service  
metadata:  
 name: backend-service  
spec:  
 type: NodePort  
 selector:  
 app: backend  
 ports:  
 - port: 80  
 targetPort: 80  
 nodePort: 30008  
---  
apiVersion: apps/v1  
kind: Deployment  
metadata:  
 name: db-deployment  
 labels:  
 app: db  
spec:  
 replicas: 1  
 selector:  
 matchLabels:  
 app: db  
 template:  
 metadata:  
 labels:  
 app: db  
 spec:  
 containers:  
 - name: database  
 image: mysql  
 ports:  
 - containerPort: 3306  
 env:  
 - name: "MYSQL_USER"  
 value: "mysql"  
 - name: "MYSQL_PASSWORD"  
 value: "password"  
 - name: "MYSQL_ROOT_USER"  
 value: "root"  
 - name: "MYSQL_ROOT_PASSWORD"  
 value: "password"  

---  
apiVersion: v1  
kind: Service  
metadata:  
 name: db-service  
spec:  
 type: NodePort  
 selector:  
 app: db  
 ports:  
 - port: 3306  
 targetPort: 3306
#create deployment and services  
kubectl apply -f app.yaml  
#Display list of pods ,deployment and services  
k get po,svc,deploy

pic

Що таке NetworkPolicy у Kubernetes?

NetworkPolicy — це ресурс Kubernetes, який визначає, як поди можуть взаємодіяти між собою, з сервісами або з зовнішніми мережами. За замовчуванням весь трафік дозволений між подами в кластері Kubernetes.
текст перекладу
Однак за допомогою NetworkPolicies ви можете встановити детальні правила для:

  • Дозволяти або забороняти вхідний (ingress) і вихідний (egress) трафік.
  • Захищати чутливі сервіси, такі як бази даних.
  • Обмежувати трафік між просторами імен.

Тепер завдання: “Дозволити Backend Pods доступ до бази даних”

Припустимо, у вас є така конфігурація:

  • Backend pods мають мітку app=backend.
  • Database pods мають мітку app=db.

Метою є дозволити лише pod'ам backend доступ до бази даних через порт 3306 (MySQL). Ось YAML: network.yaml

apiVersion: networking.k8s.io/v1  
kind: NetworkPolicy  
metadata:  
 name: db-access-policy  
 namespace: default  
spec:  
 podSelector:  
 matchLabels:  
 app: db  
 policyTypes:  
 - Ingress  
 ingress:  
 - from:  
 - namespaceSelector:  
 matchLabels:  
 role: backend  
 podSelector:  
 matchLabels:  
 app: backend  
 ports:  
 - protocol: TCP  
 port: 3306 # Замість цього вкажіть порт вашої бази даних

Тест: Застосунок Backend може підключатися до Frontend і до бази даних

# список pod'ів  
k get pods -o wide  
# заходимо в pod backend   
k exec -it -- /bin/bash  
# тестуємо зв'язок із frontend 
curl 

Вихід у терміналі. Застосунок Frontend і Backend успішно підключені

pic

Застосунок Backend і база даних також успішно підключені

pic

Тест: З'єднання між frontend і database app

pic

Доступ до бази даних для frontend app заблоковано.

будь ласка, ставте лайк і підписуйтесь

Перекладено з: CKA exam: Network Policies

Leave a Reply

Your email address will not be published. Required fields are marked *