Как разрешить доступ к kubernetes api, используя исходящую сетевую политику? - PullRequest
0 голосов
/ 30 апреля 2018

Начальный контейнер с командой kubectl get pod используется для получения статуса готовности другого модуля.

После включения Egress NetworkPolicy контейнер инициализации не может получить доступ к API Kubernetes: Unable to connect to the server: dial tcp 10.96.0.1:443: i/o timeout. CNI - Калико.

Было опробовано несколько правил, но ни одно из них не работает (IP-адреса хоста службы и главного хоста, разные маски CIDR):

...
  egress:
  - to:
    - ipBlock:
        cidr: 10.96.0.1/32
    ports:
    - protocol: TCP
      port: 443
...

или с использованием пространства имен (пространства имен по умолчанию и пространства системы kube):

...
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          name: default
    ports:
    - protocol: TCP
      port: 443
...

Похоже, что ipBlock правила просто не работают, а правила пространства имен не работают, потому что kubernetes api - это нестандартный модуль.

Это можно настроить? Кубернетес - 1,9,5, Калико - 3,1,1.

Проблема все еще существует с GKE 1.13.7-gke.8 и ситцем 3.2.7

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Вам необходимо получить реальный IP-адрес мастера, используя 'kubectl get endpoints - namespace default kubernetes' и создать выходную политику, чтобы разрешить это.

---
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1 
metadata:
  name: allow-apiserver
  namespace: test
spec:
  policyTypes:
  - Egress
  podSelector: {}
  egress:
  - ports:
    - port: 443
      protocol: TCP
    to:
    - ipBlock:
        cidr: x.x.x.x/32
0 голосов
/ 31 января 2019

Внутренний обходной путь, который я мог придумать, таков:

  podSelector:
    matchLabels:
      white: listed
  egress:
    - to:
        - ipBlock:
            cidr: 0.0.0.0/0

Это позволит получить доступ к серверу API - вместе со всеми другими IP-адресами в Интернете: - /

Вы можете объединить это с DENY для всего трафика, не занесенного в белый список, из правила пространства имен, чтобы запретить выход для всех других модулей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...