NetworkPolicy не разрешает выход на порты HTTP / HTTPS - PullRequest
0 голосов
/ 30 января 2019

Я использую NetworkPolicy ниже, чтобы разрешить выход на порты HTTP и HTTPS, но запуск wget https://google.com не работает, когда применяется сетевая политика.Доменное имя разрешено (правило выхода DNS работает), но время подключения к внешнему хосту истекло.

Я пробовал на мини-кубе с cilium и на Azure с azure-npm на тот случай, если произошла какая-то странность с сетьюконтроллер политики, но он ведет себя одинаково на обоих.Я сбит с толку, так как использую тот же метод для выхода DNS (который работает), но он не работает для других портов.

Что мешает выходу на портах HTTP / HTTPS?

Kubernetes версия 1.11.5

apiVersion: extensions/v1beta1
kind: NetworkPolicy
metadata:
  name: my-netpolicy
spec:
  egress:
  - ports:
    - port: 53
      protocol: UDP
    - port: 53
      protocol: TCP
  - ports:
    - port: 443
      protocol: UDP
    - port: 443
      protocol: TCP
    - port: 80
      protocol: UDP
    - port: 80
      protocol: TCP
  podSelector:
    matchLabels:
      my-label: my-app

(Да, правила UDP, вероятно, не нужны, но пробуют все здесь)

(Я также пробовал wget на частном сервере в случае блокировки Google / etc.IP-адреса Azure, тот же результат)

(я также пытался сопоставить правила входа, потому что «почему нет», тот же результат)


kubectl describe в сетевой политике:

Name:         my-netpolicy
Namespace:    default
Created on:   2019-01-21 19:00:04 +0000 UTC
Labels:       ...
Annotations:  <none>
Spec:
  PodSelector:     ...
  Allowing ingress traffic:
    To Port: 8080/TCP
    From: <any> (traffic not restricted by source)
    ----------
    To Port: https/UDP
    To Port: https/TCP
    To Port: http/TCP
    To Port: http/UDP
    From: <any> (traffic not restricted by source)
  Allowing egress traffic:
    To Port: 53/UDP
    To Port: 53/TCP
    To: <any> (traffic not restricted by source)
    ----------
    To Port: https/UDP
    To Port: https/TCP
    To Port: http/UDP
    To Port: http/TCP
    To: <any> (traffic not restricted by source)
  Policy Types: Ingress, Egress

Минимальный воспроизводимый пример:

apiVersion: v1
kind: Pod
metadata:
  name: netpolicy-poc-pod
  labels:
    name: netpolicy-poc-pod
spec:
  containers:
  - name: poc
    image: ubuntu:18.04
    command: ["bash", "-c", "while true; do sleep 1000; done"]
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: netpolicy-poc
spec:
  podSelector:
    matchLabels:
      name: netpolicy-poc-pod
  egress:
  - ports:
    - port: 80
      protocol: UDP
    - port: 80
      protocol: TCP
    - port: 443
      protocol: UDP
    - port: 443
      protocol: TCP
    - port: 53
      protocol: UDP
    - port: 53
      protocol: TCP
  ingress: []

Тогда:

kubectl exec -it netpolicy-poc /bin/bash
apt update
apt install wget -y
wget https://google.com

1 Ответ

0 голосов
/ 26 февраля 2019

Оказывается, политика, которую я дал, работает нормально, просто контроллеры, реализующие политику, имели некоторые ошибки.В Minikube + Cilium он просто не работал для IPv6, но отлично работал для IPv4, а в AKS функция все еще в основном в бета-версии, и есть другие варианты, которые мы могли бы попробовать.При использовании реализации azure-npm я ничего не нашел по моей конкретной проблеме, но, поскольку она отлично работает в Minikube на IPv4, я предполагаю, что она будет хорошо работать и в Azure после настройки «рабочего» контроллера.

Некоторые ресурсы, найденные мной для проблемы Azure:

...