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

Как получить внешний доступ к службе Kubernetes типа «NodePort», используя общедоступный IP-адрес ec2

На ec2 запущен одноузловой кластер k8s. На узле работает служба с типом «NodePort» с открытым портом «31380».

Мне нужно получить доступ к этой службе извне через порт 80.

  apiVersion: v1
  kind: Service
  metadata:
    name: demo-nginx
    labels:
      run: demo-nginx
  spec:
    ports:
    - port: 80
      protocol: TCP
    selector:
      run: demo-nginx
    type: **NodePort**

Какая дополнительная конфигурация необходима для доступа к этому с общедоступного IP-адреса ec2, например удачный "curl ec2publicIp: 80" или через браузер?

> ~$ kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
demo-nginx   NodePort    10.107.6.8   <none>        80:31380/TCP   17m
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP        23m

Примечание № 1) Я могу получить доступ к службе изнутри узла, используя частный IP.

curl 172.31.8.98:31380

Примечание # 2) Я пробовал комбинацию правил IPtable, например -

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 172.31.8.98:31380
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT

Примечание № 3) Моя группа безопасности ec2 и правило настроены на разрешение HTTP-трафика.

Примечание №4) Я обновил IP-переадресацию в своем экземпляре EC2.

Примечание № 5) Сервис k8s предоставляет простое развертывание nginx.

> $ kubectl get deployments
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
demo-nginx   1/1     1            1           43m

Мы будем очень признательны за любое понимание этого вопроса.

N.B. Я уже просмотрел много содержимого, но не смог найти решения.

Если вы ищете решение для внешнего доступа к сервису Kubernetes (вне кластера), тогда Kubernetes Ingress ресурс будет лучшим выбором для достижения этой цели. Ingress, специально используемый для предоставления функций маршрутизации HTTP и HTTPS извне кластера во вложенные службы Kubernetes.

Когда вы решили использовать Ingress, первый шаг перед ingress controller Установка будет заключаться в выборе подходящего провайдера входящего трафика, который должен удовлетворять конкретным требованиям облачной платформы.

Для AWS я бы сделал ставку на использование NGINX Ingress Controller поскольку он наивно предлагает уровень L4 или L7 для ELB, вы можете найти дополнительную информацию о ingress-nginx реализация Вот.

Если вы использовали Копс чтобы построить свой кластер, взгляните на ingress-nginx монтаж Вот.

Я бы также рекомендовал проверить AWS ALB Ingress Controller для Kubernetes.

Попробуйте использовать kubectl port-forward.

Попробуйте выполнить эту команду в отдельном терминале: kubectl port-forward pod/demo-nginx 9998:80 а затем попробуйте сделать curl localhost:80. Если вы хотите запустить это в фоновом режиме, просто поставьте & в конце команды.

Обратите внимание, что это будет работать только на вашем компьютере. Если вы хотите представить это миру, я бы посоветовал вам изучить использование службы типа LoadBalancer или какого-либо ресурса Ingress.