Назад | Перейти на главную страницу

Сервис Kubernetes-calico, доступный только из того места, где развернут под

Я столкнулся с этой проблемой в течение последних 3 дней и до сих пор не могу понять, почему я не могу получить доступ к NodePort за пределами кластера k8s с использованием типа службы NodePort.

В основном я настроил кластер из 3 узлов в rhel8, я следовал этому руководству https://www.tecmint.com/install-a-kubernetes-cluster-on-centos-8/ но столкнулся с некоторыми проблемами в сети Weavenet, поэтому я делаю это снова, но на этот раз с calico.

Вот мой кластер из 3 узлов:

Я установил последнюю версию calico для сетевого аддона, и, как вы можете видеть, все модули kube исправны и работают.

Теперь вот мой файл развертывания

apiVersion: apps/v1
kind: Deployment
metadata:
    name: hello-k8s
spec:
    selector:
     matchLabels:
        app: hello-k8s
    replicas: 1
    template:
      metadata:
        labels:
          app: hello-k8s
      spec:
        containers:
         - name: spring-boot
           image: fuzzy28/hello-k8s:v3
           ports:
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
    name: hello-k8s-svc
spec:
    selector:
      app: hello-k8s
    ports:
      - protocol: TCP
        port: 8080
        targetPort: 8080
    type: NodePort

Я развернул его, и он отлично работает в узле, выделенном ниже.

Если мы проверим службу, она работает в порту 32020.

Я открыл порты во всех узлах, используя команду ниже

firewall-cmd --permanent --add-port=30000-32767/tcp

Итак, момент истины, после проверки этого в браузере за пределами кластера k8s, он недоступен. Я пробовал это на всех IP-адресах узлов, но недоступен.

Странно то, что URL-адрес доступен только внутри модуля, из которого он развернут.

Я действительно не понимаю, что здесь происходит, вот мои сетевые интерфейсы на случай, если хотите посмотреть.

Мне потребовалось время, чтобы выяснить, что является наиболее вероятной причиной проблемы. Оказывается, начиная с выпуска RHEL 8 iptables устарели и nftables являются его новой заменой.

38.2. Когда использовать firewalld, nftables или iptables

  • iptables: The iptables полезность устарел в Red Hat Enterprise Linux 8. Используйте вместо nftables.

Сеть Kubernetes использует iptables и это несовместимо с nftables.

Я пытался решить вашу проблему, отключив firewalld и nftables, и заставьте rhel8 использовать вместо этого iptables, но он все равно не решил всех проблем с подключением в кластере.

Похоже, лучшее, что вы можете сделать на данный момент, - это использовать старую версию rhel. Дайте мне знать, если у вас возникнут дополнительные вопросы.