Как правильно выставить сервис, используя входной контроллер nginx RBAC?

Я использую инструмент kubeadm, чтобы создать кластер kubernetes v1.7.

Достаточно просто выставить на моем хосте службу "echoheaders" kubenode1.kube.com используя external-ip

Создайте развертывание, запустив:

kubectl run echoheaders --image=gcr.io/google_containers/echoserver:1.5

Выставьте сервис из развертывания:

kubectl expose deployment echoheaders --port=80 --target-port=8080 --external-ip='192.168.10.96'

Доступ к нему из вашего веб-браузера:

http://kubenode1.kube.com

Теперь я бы хотел выставить такой же сервис echoheaders используя Ролевый входной контроллер из этого руководства: https://github.com/kubernetes/ingress/tree/master/examples/rbac/nginx

Из приведенного выше руководства я запускаю команды без проблем..

После этого создайте развертывание и службу "echoheader" с типом: NodePort, но без использования параметра external-ip

kubectl run echoheaders --image=gcr.io/google_containers/echoserver:1.5

kubectl expose deployment echoheaders --port=80 --target-port=8080 --type=NodePort

Мы можем получить доступ к услуге с curl 192.168.10.96:31782

Создание также входного ресурса echoheaders для этого сервиса:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: echoheaders-ingress
spec:
  rules:
    - host: kubenode1.kube.com
      http:
        paths:
          - path: /
            backend:
              serviceName: echoheaders
              servicePort: 80

Но я не могу получить доступ к услуге:

curl http(s)://kubenode1.kube.com -H "Host: kubenode1.kube.com"

возвращается

curl: (7) Failed connect to kubenode1.kube.com:80; Connection Refused

Кажется, все хорошо, когда я проверяю команду: kubectl, описывающий echoheaders

Последний раз я пробовал сервис kubernetes-dashboard отсюда: https://github.com/kubernetes/dashboard/blob/master/src/deploy/kubernetes-dashboard.yaml

Это совместимо с Kubernetes 1.6 RBAC, но я также не смог получить к нему доступ извне. По-прежнему получаю ту же ошибку:

curl: (7) Не удалось подключиться к kubenode1.kube.com:80; В соединении отказано

Должен ли я предоставить более подробную информацию? Я что-то упускаю, чтобы иметь возможность выставить сервис, используя контроллер nginx-ingress на основе ролей?

Мне нужно получить доступ к моим услугам с http(s)://kubenode1.kube.com и не быть публично доступным через порт Nodeport (http(s)://kubenode1.kube.com:31782)

1 ответ

Решение

Вам нужно выставить контроллер nginx на нодпорт 80, если вы хотите получить к нему доступ через этот порт. Похоже, пример, на который вы ссылаетесь, предоставляет его через порт 30080: https://github.com/kubernetes/ingress/blob/master/examples/rbac/nginx/nginx-ingress-controller-service.yml

Для использования порта 80 сначала необходимо разрешить такие низкие номера портов для служб нодпорта. Вы можете сделать это с --service-node-port-range параметр apiserver, см. https://kubernetes.io/docs/admin/kube-apiserver/

Другие вопросы по тегам