NetworkPolicy не разрешает выход на порты HTTP/HTTPS
Я использую 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/ и т. д. заблокировать Azure IPs, тот же результат)
(Я также пытался сопоставить правила входа, потому что "почему бы и нет", тот же результат)
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 ответ
Оказывается, политика, которую я дал, работает нормально, просто у контроллеров, реализующих политику, были некоторые ошибки. В Minikube+Cilium он просто не работал для IPv6, но отлично работал для IPv4, а в AKS функция все еще в основном в бета-версии, и есть другие варианты, которые мы могли бы попробовать. При использовании реализации azure-npm я ничего не нашел по конкретной проблеме, но, поскольку она отлично работает в Minikube на IPv4, я предполагаю, что она будет работать и в Azure, как только будет настроен "работающий" контроллер.
Некоторые ресурсы, которые я нашел для проблемы Azure: