текст перекладу
Це мій перший пост. Сподіваюся, вам сподобається контент.
Що таке 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
Що таке 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 успішно підключені
Застосунок Backend і база даних також успішно підключені
Тест: З'єднання між frontend і database app
Доступ до бази даних для frontend app заблоковано.
будь ласка, ставте лайк і підписуйтесь
Перекладено з: CKA exam: Network Policies