заблочить NodePort?
Дело в том, что k8s поднят на baremeal и сервисы публикуются через nodePort, а уже на внешнем nginx прописываются proxy_pass, ssl терминация и всякие специфичные редиректы.
Если применять политику из документации:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-from-other-namespaces
spec:
podSelector:
matchLabels:
ingress:
- from:
- podSelector: {}
К двум например namespace, то внутри пространства трафик ходит, а с другого - нет, собственно как и должно, но при этом блокируется и внешний трафик на NodePort.
namespaceSelector and podSelector: A single to/from entry that specifies both namespaceSelector and podSelector selects particular Pods within particular namespaces. Be careful to use correct YAML syntax; this policy:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress ingress: - from: - ipBlock: cidr: <ПОДСЕТЬ НЖИНКСА>
пробовал вчера и так и сяк. В итоге походу обычными k8s политиками тут не обойтись, решил использовать родной calicoctl. Сначала решил попробовать ограничить namespace, как в примере выше через k8s NP, и применить разрешающее правило через calicoctl - не прокатило. Сейчас рассматриваю вариант, как это сделать средствами calicoctl. Если создать правило, как в документации на глобальную политику, которая будет разрешать входящий трафик к 30000-32000 портам, а потом правила ограничения по NS, то результат тот же. apiVersion: projectcalico.org/v3 kind: NetworkPolicy metadata: name: deny-from-other-namespaces namespace: np1 spec: selector: all() types: - Ingress ingress: - action: Allow source: selector: all() --- apiVersion: projectcalico.org/v3 kind: NetworkPolicy metadata: name: deny-from-other-namespaces namespace: np2 spec: selector: all() types: - Ingress ingress: - action: Allow source: selector: all() --- apiVersion: projectcalico.org/v3 kind: GlobalNetworkPolicy metadata: name: allow-nodeport spec: preDNAT: true applyOnForward: true order: 10 ingress: - action: Allow protocol: TCP destination: selector: has(node-role.kubernetes.io/master) ports: [30000:32000] selector: has(node-role.kubernetes.io/master)
Обсуждают сегодня