Как разрешить внешний трафик и запретить взаимодействие между модулями с помощью сетевой политики?

Я настраиваю свое пространство имен по умолчанию в кластере kubernetes, чтобы разрешить входящий трафик с внешних узлов / хостов, но запретить любую возможную связь между модулями. У меня есть 2 модуля nginx, которые я хочу полностью изолировать внутри кластера. Оба модуля представлены службой типа nodePort и доступны извне.

Сначала я применяю следующую политику запрета сети по умолчанию:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Ingress

Затем я пытаюсь разрешить внешний трафик с помощью следующей сетевой политики:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-external
spec:
  podSelector: {}
  ingress:
    - from:
        - ipBlock:
            cidr: 192.168.0.0/16

Но, к сожалению, я не могу получить доступ к сервису ни извне, ни внутри своего кластера.

Пример выполнения в: - macOS High Sierra v10.13.6 - minikube v1.5.2 -> с сетевым плагином = cilium - kubectl v1.16.2

Как я мог столкнуться с этой проблемой?


person Javier Errea    schedule 05.11.2019    source источник
comment
ваш кластер должен включать под CIDR. Вы можете явно заблокировать под CIDR и разрешить всем остальным   -  person Patrick W    schedule 05.11.2019
comment
Я попытался найти свой cidr пода с помощью команды: kubectl cluster-info dump | grep -i cidr, и результат был следующим: clusterCIDR не указан, невозможно различить внутренний и внешний трафик. Затем я взглянул на свой файл, расположенный по адресу: ~ / .minikube / profiles / minikube / config.json, и это был результат: MachineConfig: {...}, KubernetesConfig: {... NetworkPlugin: cni, FeatureGates: , ServiceCIDR: 10.96.0.0/12, ExtraOptions: null   -  person Javier Errea    schedule 06.11.2019
comment
Вы ставите флаг CNI при запуске миникуба?   -  person Mariusz K.    schedule 12.11.2019


Ответы (1)


Если вы хотите разрешить любой входящий трафик к любому модулю, кроме трафика, исходящего из вашего кластера, вы можете использовать обозначение «кроме» в правиле, которое разрешает трафик со всех IP-адресов. Ниже замените 172.17.1.0/24 на cidr, содержащий ваши поды:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-internal
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 172.17.1.0/24
person danielorn    schedule 05.11.2019
comment
Я попытался найти свой podCIDR, но когда я выполняю следующую строку кода, я получаю этот результат. kubectl cluster-info dump | grep -i cidr - ›clusterCIDR not specified, unable to distinguish between internal and external traffic. - person Javier Errea; 06.11.2019
comment
Мне удалось установить podCIDR с помощью следующей команды: kubectl patch node minikube -p '{"spec":{"podCIDR":"10.33.12.0/24"}}'. И когда я применяю указанную вами сетевую политику, весь внутренний трафик блокируется (идеально). Но я не могу получить доступ к сервису, предоставленному с моего хост-компьютера. Тем не менее, узел minikube (VM) может curl использовать модули и сервисы и получить ответ. Однако я все еще получаю сообщение: clusterCIDR не указан, невозможно различить внутренний и внешний трафик - person Javier Errea; 06.11.2019