[Перевод] Сетевые политики Kubernetes для изоляции подов и пространств имён

Сетевые политики 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
------------------------------------------------------------------------------

4062facbbd1f19a6847ea8e3f9769a8e.PNG

Теперь давайте посмотрим, могут ли два пода (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