Сетевая политика Kubernetes останавливает весь трафик c в Pod - PullRequest
0 голосов
/ 20 февраля 2020

Сценарий:

  1. У меня есть четыре (4) модуля, начисление заработной платы, внутренний, внешний, mysql.
  2. Я хочу, чтобы внутренний модуль имел только доступ:
    • а. Внутренний> Расчет заработной платы по порту 8080
    • b. Внутренний> mysql на порту 3306

Пожалуйста, подскажите, что отсутствует часть? Я сделал ниже сетевую политику. Но мой модуль не может общаться с «любым» модулем. Следовательно, он достиг заданной цели, но практически не может получить доступ к другим модулям. Ниже приведены подробности моей сетевой политики.

master $ k describe netpol/internal-policy
Name:         internal-policy
Namespace:    default
Created on:   2020-02-20 02:15:06 +0000 UTC
Labels:       <none>
Annotations:  <none>
Spec:
  PodSelector:     name=internal
  Allowing ingress traffic:
    <none> (Selected pods are isolated for ingress connectivity)
  Allowing egress traffic:
    To Port: 8080/TCP
    To:
      PodSelector: name=payroll
    ----------
    To Port: 3306/TCP
    To:
      PodSelector: name=mysql
  Policy Types: Egress

Политика YAML

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: internal-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      name: internal
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          name: payroll
    ports:
      - protocol: TCP
        port: 8080
  - to:
    - podSelector:
        matchLabels:
          name: mysql
    ports:
      - protocol: TCP
        port: 3306 (edited) 

1 Ответ

0 голосов
/ 20 февраля 2020

Следовательно, он достиг поставленной цели, но практически не может получить доступ к другим модулям.

Если я вас правильно понимаю, вы достигли цели, определенной в вашей политике сети и все ваши Pods надетые этикетки name: internal в настоящее время могут обмениваться данными как с payroll (на порту 8080), так и с mysql (на порту 3306) Pods, верно?

Пожалуйста, поправьте меня, если я ошибаюсь, но я вижу некоторое противоречие в вашем утверждении. С одной стороны, вы хотите, чтобы ваш internal Pods мог общаться только с очень конкретным c набором Pods и соединяться с ними через указанные порты:

Я хочу внутренний только для доступа:

a. Внутренний> Расчет заработной платы в порту 8080

b. Внутренний> mysql на порту 3306

, а на другом вы удивляетесь, что они не могут получить доступ к другим Pods:

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

Имейте в виду, что когда вы применяете какое-то правило NetworkPolicy к указанному c набору Pods, в то же время возникает ошибка Запретить все правило неявно применяется к выбранным Pods (если вы не решите перенастроить политику по умолчанию , чтобы она работала так, как вы хотите).

Как вы можно прочитать здесь :

Бобы изолируются при наличии NetworkPolicy, который их выбирает. Если в пространстве имен есть какой-либо NetworkPolicy, выбирающий конкретный модуль, этот модуль отклонит любые подключения, которые не разрешены каким-либо NetworkPolicy. (Другие модули в пространстве имен, которые не выбраны ни одной NetworkPolicy, продолжат принимать все трафик c.)

Вышеуказанное также применимо к egress правилам.

Если в настоящее время ваши internal Pods имеют доступ только к payroll и mysql Pod для указанного ports, все работает так, как должно работать.

Если вы заинтересованы в отказе во всех другие трафик c к вашим payroll и mysql Pods, вы должны применить правило ingress к этим Pods вместо определения egress на Pods, которые должны общаться с ними, но в то же время они не должны быть лишены возможности общаться с другими Pods.

Пожалуйста, дайте мне знать, если это помогло. Если что-то не ясно или моё предположение было неверным, пожалуйста, дайте мне знать и не стесняйтесь задавать дополнительные вопросы.

...