Конфигурация Kubernetes nginx Ingress не работает для Grafana

Я новичок в настройке правил Ingress для своего кластера Kubernetes.

Мой кластер Kubernetes развернут на Bare Metal. Нет облака.

Я перешел по этой ссылке, чтобы настроить свой nginx-контроллер с RBAC в моем кластере.

Вот что я развернул:

# kubectl get all -n ingress-nginx
NAME                                           READY     STATUS    RESTARTS   AGE
pod/default-http-backend-7c5bc89cc9-ks6kd      1/1       Running   0          2h
pod/nginx-ingress-controller-5b6864749-8xbhf   1/1       Running   0          2h

NAME                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
service/default-http-backend   ClusterIP   10.233.15.56   <none>        80/TCP                       2h
service/ingress-nginx          NodePort    10.233.38.84   <none>        80:31118/TCP,443:32003/TCP   2h

NAME                                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/default-http-backend       1         1         1            1           2h
deployment.apps/nginx-ingress-controller   1         1         1            1           2h

NAME                                                 DESIRED   CURRENT   READY     AGE
replicaset.apps/default-http-backend-7c5bc89cc9      1         1         1         2h
replicaset.apps/nginx-ingress-controller-5b6864749   1         1         1         2h

Учитывая, что у меня есть настройки, я хочу получить доступ к моей панели инструментов Grafana с помощью URL-адреса.

Моя настройка графаны работает отлично.

# kubectl get all -n default
NAME                           READY     STATUS    RESTARTS   AGE
pod/grafana-67c6585fbd-4jl7p   1/1       Running   0          2h

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
service/grafana      NodePort    10.233.5.111   <none>        3000:32093/TCP   2h


NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/grafana   1         1         1            1           2h

NAME                                 DESIRED   CURRENT   READY     AGE
replicaset.apps/grafana-67c6585fbd   1         1         1         2h

Я могу получить доступ к панели управления, используя http://10.27.239.145:32093, который является IP-адресом одного из моих рабочих узлов K8S.

Теперь вместо доступа через IP: NodePort я хочу получить доступ через URL, например. grafana.test.mydomain.com

Итак, правило входа, которое я настроил в своем пространстве имен по умолчанию:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  creationTimestamp: 2018-09-25T20:32:24Z
  generation: 5
  name: grafana
  namespace: default
  resourceVersion: "28485"
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/jenkins-tls
  uid: 1c51cece-c102-11e8-bf0f-02000a1bef39
spec:
  rules:
  - host: grafana.test.mydomain.com
    http:
      paths:
      - backend:
          serviceName: grafana
          servicePort: 3000
        path: /

На моем локальном ноутбуке, с которого я тестирую, я добавил в свой /etc/hosts следующую запись:

10.27.239.145 grafana.test.mydomain.com

В своем браузере я пытаюсь получить доступ к http://grafana.test.mydomain.com, но получаю только This site can’t be reached grafana.test.mydomain.com refused to connect.

У меня сильное чувство, что я что-то упускаю, но не могу понять.

Я изменил NodePort на ClusterIP, но безуспешно.

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

I0925 21:00:19.041440       9 event.go:221] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"grafana", UID:"1c51cece-c102-11e8-bf0f-02000a1bef39", APIVersion:"extensions/v1beta1", ResourceVersion:"28485", FieldPath:""}): type: 'Normal' reason: 'UPDATE' Ingress default/grafana
I0925 21:00:19.041732       9 controller.go:171] Configuration changes detected, backend reload required.
I0925 21:00:19.216044       9 controller.go:187] Backend successfully reloaded.
I0925 21:00:19.217645       9 controller.go:204] Dynamic reconfiguration succeeded.

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


person Community    schedule 25.09.2018    source источник


Ответы (2)


Насколько я понимаю, вам нужно установить grafana.test.mydomain.com, чтобы он указывал на 10.233.38.84.

По сути, ваша служба контроллера nginx направляет трафик на ваш вход, а затем ваш вход перенаправляет его на бэкэнд на nodePort (это неявно во входящем). У меня это работает, но я использую AWS ELB, я в основном устанавливаю grafana.test.mydomain.com, чтобы он указывал на aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-0000000000.us-west-2.elb.amazonaws.com

$ kubectl get all -n ingress-nginx
NAME                                            READY     STATUS    RESTARTS   AGE
pod/default-http-backend-6586bc58b6-snxbv       1/1       Running   0          1h
pod/grafana-5b969bb7f9-tsv5k                    1/1       Running   0          52m
pod/nginx-ingress-controller-6bd7c597cb-lfwcf   1/1       Running   0          1h
pod/prometheus-server-5dbf9f4fc9-mnwn4          1/1       Running   0          53m

NAME                           TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)                      AGE
service/default-http-backend   ClusterIP      10.x.x.x         <none>                                                                    80/TCP                       1h
service/grafana                NodePort       10.x.x.x         <none>                                                                    3000:30073/TCP               52m
service/ingress-nginx          LoadBalancer   10.x.x.x         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-0000000000.us-west-2.elb.amazonaws.com   80:30276/TCP,443:32011/TCP   1h
service/prometheus-server      NodePort       10.x.x.x         <none>                                                                    9090:32419/TCP               53m

NAME                                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/default-http-backend       1         1         1            1           1h
deployment.apps/grafana                    1         1         1            1           52m
deployment.apps/nginx-ingress-controller   1         1         1            1           1h
deployment.apps/prometheus-server          1         1         1            1           53m

NAME                                                  DESIRED   CURRENT   READY     AGE
replicaset.apps/default-http-backend-6586bc58b6       1         1         1         1h
replicaset.apps/grafana-5b969bb7f9                    1         1         1         52m
replicaset.apps/nginx-ingress-controller-6bd7c597cb   1         1         1         1h
replicaset.apps/prometheus-server-5dbf9f4fc9          1         1         1         53m

$ kubectl describe ingress grafana-ingress -n ingress-nginx
Name:             grafana-ingress
Namespace:        ingress-nginx
Address:          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-0000000000.us-west-2.elb.amazonaws.com
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host                       Path  Backends
  ----                       ----  --------
  grafana.test.mydomain.com
                             /   grafana:3000 (<none>)
Annotations:
  kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"grafana-ingress","namespace":"ingress-nginx"},"spec":{"rules":[{"http":{"paths":[{"backend":{"serviceName":"grafana","servicePort":3000},"path":"/"}]}}]}}

  nginx.ingress.kubernetes.io/rewrite-target:  /
Events:
  Type    Reason  Age                From                      Message
  ----    ------  ----               ----                      -------
  Normal  CREATE  40m                nginx-ingress-controller  Ingress ingress-nginx/grafana-ingress
  Normal  UPDATE  22m (x2 over 40m)  nginx-ingress-controller  Ingress ingress-nginx/grafana-ingress
person Rico    schedule 26.09.2018

Насколько я понимаю, у вас есть служба NodePort только на порту 32093.

Ваш NodePort публикует порт 3000 в 32093 для любого адреса внешнего узла, как вы уже доказали, но вы настроили Ingress для связи с портом 3000 в службе grafana.

Либо добавьте targetPort, port и nodePort в службу для вашего экземпляра Grafana и укажите targetPort и port на 3000 и оставьте nodePort пустым / установите его на 32092. Тогда вход должен работать так, как вы опубликовали. Фрагмент:

nodePort: 32093
port: 3000
protocol: TCP
targetPort: 3000

Или попробуйте установить servicePort: 3000 в конфигурации входящего трафика на 32093. Предупреждение: я никогда не тестировал это. Не знаю, поддерживает ли это Ingress. Согласно документации, поскольку NodePort является надмножеством ClusterIP:

NodePort: предоставляет услугу на каждом IP-адресе узла на статическом порте (NodePort). Служба ClusterIP, к которой будет маршрутизироваться служба NodePort, создается автоматически. Вы сможете связаться со службой NodePort извне кластера, запросив:.

Изменить Кстати: http://grafana.test.mydomain.com:32093 должен уже работать с вашей конфигурацией (NodePort)

person christoph    schedule 25.09.2018