Как правильно выставить сервис, используя входной контроллер 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/