[Перевод] Сетевые политики Kubernetes для изоляции подов и пространств имён
Сетевые политики Kubernetes
Как можно изолировать поды и пространства имён? В этом нам помогут сетевые модели Kubernetes.
Сетевая модель Kubernetes определяет, что:
● Каждый под получает собственный IP-адрес.
● Поды могут взаимодействовать с любыми другими подами в кластере при помощи IP-адресов подов (без NAT).
● Изоляция (ограничение того, с чем может взаимодействовать каждый под) определяется сетевыми политиками.
Давайте создадим два пространства имён и развернём в них несколько подов, а после этого потестируем, как именно поды взаимодействуют друг с другом в кластере Kubernetes.
Взаимодействие между подами в пределах одного пространства имён:
Создайте новое пространство имён с именем prod и разверните в нём три пода.
# Create a new namespace and add label to that namespaces
> kubectl create ns prod
> kubectl label ns prod team=prod
# Change context to the new context (namespace)
> kubectl config set-context --current --namespace=prod
# Deploy three webservers into the prod namespace
> kubectl run webserver-1 --image=nginx --labels='role=webserver-1'
> kubectl run webserver-2 --image=nginx --labels='role=webserver-2'
> kubectl run webserver-3 --image=nginx --labels='role=webserver-3'
# Fetch the IP-Addresses of the pods
> kubectl get pods -o wide
-----------------------------------------------------------------
NAME READY STATUS RESTARTS AGE IP
webserver-1 1/1 Running 0 3m7s 10.244.189.206
webserver-2 1/1 Running 0 2m21s 10.244.151.207
webserver-3 1/1 Running 0 2m15s 10.244.151.208
-----------------------------------------------------------------
Создайте другое пространство имён с именем dev и разверните в нём два пода.
# Create a new namespace and add label to that namespaces
> kubectl create ns dev
> kubectl label ns dev team=dev
# Deploy two pod into the dev namespace
> kubectl run testserver-1 --image=nginx --labels='role=testserver-1' -n dev
> kubectl run testserver-2 --image=nginx --labels='role=testserver-2' -n dev
# Fetch the IP-Addresses of the pods
> kubectl get pods -o wide -A | grep -i
------------------------------------------------------------------------------
NAMESPACE NAME READY STATUS RESTARTS AGE IP
dev testserver-1 1/1 Running 0 3m7s 10.244.189.207
dev testserver-2 1/1 Running 0 2m21s 10.244.189.208
------------------------------------------------------------------------------
Теперь давайте посмотрим, могут ли два пода (webserver-1 и webserver-2) взаимодействовать друг с другом в одном пространстве имён (prod):
# Dive into the webserver-1 resides in the "prod" namespace
> kubectl exec -it webserver-1 -n prod bash
# Run curl to access pod named "webserver-2" resides in the same namespace
root@webserver-1:> curl 10.244.151.207 #ip-address of the "webserver-2" pod
------------------------------------------------------------------------------------------
Welcome to nginx! # Successfully accessed