Как стать автором
Обновить

Комментарии 9

Спасибо за перевод!

kubectl port-forward nginx-ingress-controller-6fc5bcc 3000:80 --namespace kube-system

Насколько я понимаю, ingress-контроллер может обслуживать подключения к нескольким сервисам. Как в таком случае при помощи port-forward добиться, чтобы запрос к localhost:3000 шёл к нужному сервису?
Например, такая конфигурация:
kubectl -n my-namespace describe ingress my-service-ing
Name:             my-service-ing
Namespace:        my-namespace
Address:          
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host               Path  Backends
  ----               ----  --------
  my.service.consul  
                     /   my-service:8080 (12.230.109.81:8080,12.230.111.42:8080)
....


kubectl -n my-namespace get ingress my-service-ing -o yaml
....
spec:
  rules:
  - host: my.service.consul
    http:
      paths:
      - backend:
          serviceName: my-service
          servicePort: 8080
        path: /
....


kubectl -n my-namespace get ingress other-service-ing -o yaml
....
spec:
  rules:
  - host: other.service.consul
    http:
      paths:
      - backend:
          serviceName: other-service
          servicePort: 8080
        path: /
....



Передать нужный заголовок Host
Похоже, с помощью port-forward не сделать, по крайней мере в доке я не нахожу у этой команды такого параметра.

P. S. Нашёл открытый запрос на подобную фичу.
curl -H 'Host: example.com' localhost:3000
Либо добавить в /etc/hosts нужный домен с адресом 127.0.0.1
Это работает! Спасибо! :)
ingress действует на HTTP уровне (приложения), а не на сетевом уровне. поэтому если у вас есть маршрутизация, основанная на path, port forwarding тут не поможет. используйте заголовок Host, как подсказывает товарищ Nailgun

Спасибо большое за статью! Спустя столько времени, она всё еще актуальна!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий