首页 文章

Kubernetes nginx Ingress配置不适用于Grafana

提问于
浏览
1

我不熟悉为Kubernetes集群配置Ingress规则 .

我的Kubernetes集群部署在Bare Metal上 . 没有 Cloud .

我跟着这个link在我的集群中用RBAC设置我的nginx-controller .

这就是我所部署的内容:

# 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

鉴于我有我的设置,我想使用URL访问我的grafana仪表板 .

我的grafana设置工作得非常好 .

# 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 访问仪表板,这是我的一个K8S工作节点的IP .

现在,而不是通过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.

对于我可能错过的内容,我们非常感谢您的帮助 .

2 回答

  • 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
    
  • 2

    据我所知,您只在端口32093上有一个NodePort服务 .

    您的NodePort将端口 3000 发布到 32093 到您已经证明的任何外部节点地址,但您已将Ingress配置为联系 grafana 服务上的端口 3000 .

    targetPortportnodePort 添加到Grafana实例的服务中,并将 targetPortport 指向3000并将nodePort保留为空/将其设置为32092.然后,入口应该按照您发布的方式工作 . 片段:

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

    或者尝试将入口配置中的 servicePort: 3000 设置为 32093 . Warning :我从未测试过这个 . 我不知道Ingress是否支持这一点 . 根据文档,它应该是NodePort是ClusterIP的超集:

    NodePort:在静态端口(NodePort)上在每个节点的IP上公开服务 . 将自动创建NodePort服务将路由到的ClusterIP服务 . 您可以通过请求以下方式从群集外部联系NodePort服务: .

    Edit 顺便说一句:http://grafana.test.mydomain.com:32093应该已经可以使用您的配置(NodePort)

相关问题