Белый список kube-apiserver с сетевой политикой - PullRequest
0 голосов
/ 10 ноября 2019

Каков наилучший способ определить правило, которое разрешает выход только для kube-apiserver с сетевой политикой?

Хотя есть ресурс Service для kube-apiserver, его нет PodsНасколько я знаю, это нельзя сделать с помощью ярлыков. При использовании белого списка IP-адресов это не гарантируется для разных кластеров. Есть ли здесь рекомендуемая практика?

1 Ответ

0 голосов
/ 14 ноября 2019

Мне на ум приходят два варианта.

1) Создать NetworkPolicy со значением по умолчанию, запрещающим весь egress трафик с Kubernetes-apiservice исключением диапазона IP-адресов.

Из-за некоторых перезапусков возможно изменение IP-адреса службы, что лучше для использования диапазона IP-адресов. В этом случае вам нужно внести в белый список kubernetes service IP и Endpoint IP.

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

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-egress
  #optional namespace
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress
  - to:
    - ipBlock:
      cidr: <kube-apiserver-IP-range>
    - port: <svc-port>
      protocol: <svc-protocol>

Я бы посоветовал вам проверить эту статью.

2) Создать service со статическимIP, который будет перенаправлять трафик на kubernetes-apiserver.

Сервис, который будет запускать kubectl proxy на apiserver.

Как определить kube-apiserver

В каждом кластере по умолчанию вы сможете увидеть один сервис. Например, в kubeadm это kubernetes

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   15d

Если вы опишите это, вы получите endpoint.

$ kubectl describe svc kubernetes
Name:              kubernetes
Namespace:         default
Labels:            component=apiserver
                   provider=kubernetes
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP:                10.96.0.1
Port:              https  443/TCP
TargetPort:        6443/TCP
Endpoints:         10.166.0.30:6443
Session Affinity:  None
Events:            <none>

Если вы будете проверять модули из kube-system пространства именбольшинство из них имеют IP-адрес, который является конечной точкой службы kubernetes.

$ kubectl get pods -n kube-system -o wide
NAME                                   READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES
coredns-5644d7b6d9-7sm4d               1/1     Running   3          15d   10.32.0.3     ubus-kubeadm   <none>           <none>
coredns-5644d7b6d9-g42g6               1/1     Running   3          15d   10.32.0.2     ubus-kubeadm   <none>           <none>
etcd-ubus-kubeadm                      1/1     Running   3          15d   10.166.0.30   ubus-kubeadm   <none>           <none>
kube-apiserver-ubus-kubeadm            1/1     Running   3          15d   10.166.0.30   ubus-kubeadm   <none>           <none>
kube-controller-manager-ubus-kubeadm   1/1     Running   3          15d   10.166.0.30   ubus-kubeadm   <none>           <none>
kube-proxy-57r9m                       1/1     Running   3          15d   10.166.0.30   ubus-kubeadm   <none>           <none>
kube-scheduler-ubus-kubeadm            1/1     Running   3          15d   10.166.0.30   ubus-kubeadm   <none>           <none>
weave-net-l6b5x                        2/2     Running   9          15d   10.166.0.30   ubus-kubeadm   <none>           <none>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...