На 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.