Межсетевой экран ufw блокирует кубернеты (ситцем)

Я пытаюсь установить кластер Kubernetes на свой сервер (Debian 10). На своем сервере я использовал ufw в качестве брандмауэра. Перед созданием кластера я разрешил эти порты в ufw:

179 / TCP, 4789 / UDP, 5473 / TCP, 443 / TCP, 6443 / TCP, 2379 / TCP, 4149 / TCP, 10250 / TCP, 10255 / TCP, 10256 / TCP, 9099 / TCP, 6443 / TCP

Как следует из документа calico (https://docs.projectcalico.org/getting-started/kubernetes/requirements), а также этот репозиторий git о безопасности kubernetes (https://github.com/freach/kubernetes-security-best-practice).

Но когда я хочу создать кластер, модуль calico / node не может запуститься, потому что Феликс не работает (я разрешил 9099 / tcp в ufw):

Ошибка проверки живучести: calico / node не готов: Феликс не работает: получить http://localhost:9099/liveness: dial tcp [:: 1]: 9099: connect: соединение отклонено

Если я отключу ufw, кластер будет создан и ошибки нет.

Поэтому я хотел бы знать, как мне настроить ufw, чтобы кубернеты работали. Если бы кто-нибудь мог мне помочь, было бы очень здорово, спасибо!

Изменить: мой статус ufw

To                         Action      From
6443/tcp                   ALLOW       Anywhere
9099                       ALLOW       Anywhere
179/tcp                    ALLOW       Anywhere
4789/udp                   ALLOW       Anywhere
5473/tcp                   ALLOW       Anywhere
2379/tcp                   ALLOW       Anywhere
8181                       ALLOW       Anywhere
8080                       ALLOW       Anywhere
###### (v6)                LIMIT       Anywhere (v6)              # allow ssh connections in
Postfix (v6)               ALLOW       Anywhere (v6)
KUBE (v6)                  ALLOW       Anywhere (v6)
6443 (v6)                  ALLOW       Anywhere (v6)
6783/udp (v6)              ALLOW       Anywhere (v6)
6784/udp (v6)              ALLOW       Anywhere (v6)
6783/tcp (v6)              ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
4149/tcp (v6)              ALLOW       Anywhere (v6)
10250/tcp (v6)             ALLOW       Anywhere (v6)
10255/tcp (v6)             ALLOW       Anywhere (v6)
10256/tcp (v6)             ALLOW       Anywhere (v6)
9099/tcp (v6)              ALLOW       Anywhere (v6)
6443/tcp (v6)              ALLOW       Anywhere (v6)
9099 (v6)                  ALLOW       Anywhere (v6)
179/tcp (v6)               ALLOW       Anywhere (v6)
4789/udp (v6)              ALLOW       Anywhere (v6)
5473/tcp (v6)              ALLOW       Anywhere (v6)
2379/tcp (v6)              ALLOW       Anywhere (v6)
8181 (v6)                  ALLOW       Anywhere (v6)
8080 (v6)                  ALLOW       Anywhere (v6)

53                         ALLOW OUT   Anywhere                   # allow DNS calls out
123                        ALLOW OUT   Anywhere                   # allow NTP out
80/tcp                     ALLOW OUT   Anywhere                   # allow HTTP traffic out
443/tcp                    ALLOW OUT   Anywhere                   # allow HTTPS traffic out
21/tcp                     ALLOW OUT   Anywhere                   # allow FTP traffic out
43/tcp                     ALLOW OUT   Anywhere                   # allow whois
SMTPTLS                    ALLOW OUT   Anywhere                   # open TLS port 465 for use with SMPT to send e-mails
10.32.0.0/12               ALLOW OUT   Anywhere on weave
53 (v6)                    ALLOW OUT   Anywhere (v6)              # allow DNS calls out
123 (v6)                   ALLOW OUT   Anywhere (v6)              # allow NTP out
80/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow HTTP traffic out
443/tcp (v6)               ALLOW OUT   Anywhere (v6)              # allow HTTPS traffic out
21/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow FTP traffic out
43/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow whois
SMTPTLS (v6)               ALLOW OUT   Anywhere (v6)              # open TLS port 465 for use with SMPT to send e-mails

Извините, мои правила ufw немного запутаны, я перепробовал слишком много вещей, чтобы кубернеты заработали.


person pchmn    schedule 01.04.2020    source источник
comment
опубликуйте свой uwf status, чтобы мы могли просматривать активные правила и проверять каждый шаг. Возможно, это опечатка, но ошибка подразумевает правило, которое ее блокирует.   -  person Will R.O.F.    schedule 01.04.2020
comment
также проверьте: Calico Issue # 2720 и прочтите о настройках CIDR, это может быть IP-перекрытие. Также прочтите этот выпуск, поскольку он может вам помочь: Calico Issue № 2042   -  person Will R.O.F.    schedule 01.04.2020
comment
Спасибо за ответ, я разместил свой ufw status в исходном посте. Также я уже видел проблему, о которой вы упомянули, но это не помогло мне в ситуации.   -  person pchmn    schedule 01.04.2020
comment
Мне удалось развернуть кубернеты на debian 10 с помощью calico с нуля, включив те же порты, что и вы. Не могли бы вы сказать, какие кубернеты вы пытались установить? Я хотел бы призвать вас удалить свой uwf, переустановить его, включить только упомянутые вами порты и попробовать еще раз. Я пишу ответ с шаг за шагом, который я сделал, чтобы заставить его работать. надеюсь помочь вам.   -  person Will R.O.F.    schedule 02.04.2020


Ответы (1)


Я пытаюсь установить кластер Kubernetes на свой сервер (Debian 10). На своем сервере я использовал ufw в качестве брандмауэра. Перед созданием кластера я разрешил эти порты на ufw: 179 / tcp, 4789 / udp, 5473 / tcp, 443 / tcp, 6443 / tcp, 2379 / tcp, 4149 / tcp, 10250 / tcp, 10255 / tcp, 10256 / tcp. , 9099 / TCP, 6443 / TCP

ПРИМЕЧАНИЕ. все исполняемые команды начинаются с $

  • Следуя этой первоначальной инструкции, я установил ufw на Debian 10 и включил те же порты, которые вы упомянули:
$ sudo apt update && sudo apt-upgrade -y
$ sudo apt install ufw -y
$ sudo ufw allow ssh
Rule added
Rule added (v6)

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

$ sudo ufw allow 179/tcp
$ sudo ufw allow 4789/tcp
$ sudo ufw allow 5473/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw allow 6443/tcp
$ sudo ufw allow 2379/tcp
$ sudo ufw allow 4149/tcp
$ sudo ufw allow 10250/tcp
$ sudo ufw allow 10255/tcp
$ sudo ufw allow 10256/tcp
$ sudo ufw allow 9099/tcp

$ sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
179/tcp                    ALLOW       Anywhere                  
4789/tcp                   ALLOW       Anywhere                  
5473/tcp                   ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
6443/tcp                   ALLOW       Anywhere                  
2379/tcp                   ALLOW       Anywhere                  
4149/tcp                   ALLOW       Anywhere                  
10250/tcp                  ALLOW       Anywhere                  
10255/tcp                  ALLOW       Anywhere                  
10256/tcp                  ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
179/tcp (v6)               ALLOW       Anywhere (v6)             
4789/tcp (v6)              ALLOW       Anywhere (v6)             
5473/tcp (v6)              ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
6443/tcp (v6)              ALLOW       Anywhere (v6)             
2379/tcp (v6)              ALLOW       Anywhere (v6)             
4149/tcp (v6)              ALLOW       Anywhere (v6)             
10250/tcp (v6)             ALLOW       Anywhere (v6)             
10255/tcp (v6)             ALLOW       Anywhere (v6)             
10256/tcp (v6)             ALLOW       Anywhere (v6)       

  • Теперь я установлю Docker:
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common=
  • Добавление репозитория Docker:
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"
  • Обновите список источников и установите Docker-ce:
$ sudo apt-get update
$ sudo apt-get -y install docker-ce

ПРИМЕЧАНИЕ. В производственной системе рекомендуется установить фиксированную версию докера:

$ apt-cache madison docker-ce
$ sudo apt-get install docker-ce=<VERSION>

  • Установка Kube Tools - kubeadm, kubectl, kubelet:
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  • Настройте репозиторий Kubernetes (скопируйте 3 строки и вставьте сразу):
$ cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
  • Установка пакетов:
$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl
  • После установки отметьте эти пакеты, чтобы они не обновлялись автоматически:
$ sudo apt-mark hold kubelet kubeadm kubectl

$ sudo kubeadm init --pod-network-cidr=192.168.0.0/16
  • Включите kubectl для пользователя без полномочий root:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
daemonset.apps/calico-node created
serviceaccount/calico-node created
deployment.apps/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
  • Проверить статус:
$ kubectl get pods -n kube-system
NAME                                           READY   STATUS    RESTARTS   AGE
calico-kube-controllers-555fc8cc5c-wnnvq       1/1     Running   0          26m
calico-node-sngt8                              1/1     Running   0          26m
coredns-66bff467f8-2qqlv                       1/1     Running   0          55m
coredns-66bff467f8-vptpr                       1/1     Running   0          55m
etcd-kubeadm-ufw-debian10                      1/1     Running   0          55m
kube-apiserver-kubeadm-ufw-debian10            1/1     Running   0          55m
kube-controller-manager-kubeadm-ufw-debian10   1/1     Running   0          55m
kube-proxy-nx8cz                               1/1     Running   0          55m
kube-scheduler-kubeadm-ufw-debian10            1/1     Running   0          55m

Рекомендации:

Извините, мои правила ufw немного запутаны, я перепробовал слишком много вещей, чтобы кубернеты заработали.

  • Это нормально - пробовать много вещей, чтобы что-то работало, но иногда это становится проблемой.
  • Я отправляю вам шаг за шагом, который я сделал, чтобы развернуть его в той же среде, что и вы, чтобы вы могли повторить его еще раз для достижения тех же результатов.
  • Мой зонд felix не получил никакой ошибки, только когда он получил ошибку, когда я попытался (специально) развернуть кубернеты без создания правил в ufw.

Если это не помогло, выполните следующие действия:

  • Now, if after following this tutorial you still get a similar problem, please update the question with the following informations:
    • kubectl describe <pod_name> -n kube-system
    • kubectl get pod <pod_name> -n kube-system
    • kubectl logs <pod_name> -n kube-system
    • Всегда рекомендуется начинать с чистой установки Linux, если вы используете виртуальную машину, удалите виртуальную машину и создайте новую.
    • Если вы работаете на «голом железе», подумайте, что еще работает на сервере, возможно, другое программное обеспечение вмешивается в сетевое взаимодействие.

Сообщите мне в комментариях, если вы обнаружите какие-либо проблемы после выполнения этих шагов по устранению неполадок.

person Will R.O.F.    schedule 02.04.2020
comment
Спасибо, чувак, я сбросил настройки ufw, как ты сказал, и знаю, что это работает! Очевидно, проблема заключалась в том, что я запрещал весь исходящий трафик (sudo ufw default deny outgoing), и даже при включенных портах он блокировал кубернеты. - person pchmn; 03.04.2020