我不熟悉为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 回答
从我看到的,你需要设置
grafana.test.mydomain.com
指向10.233.38.84
.基本上,您的nginx控制器服务正在将流量定向到您的入口,然后您的入口将它转发到nodePort上的后端(这在入口中是隐含的) . 它适用于我,但我使用的是AWS ELB,我基本上设置
grafana.test.mydomain.com
指向aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-0000000000.us-west-2.elb.amazonaws.com
据我所知,您只在端口32093上有一个NodePort服务 .
您的NodePort将端口
3000
发布到32093
到您已经证明的任何外部节点地址,但您已将Ingress配置为联系grafana
服务上的端口3000
.将
targetPort
,port
和nodePort
添加到Grafana实例的服务中,并将targetPort
和port
指向3000并将nodePort保留为空/将其设置为32092.然后,入口应该按照您发布的方式工作 . 片段:或者尝试将入口配置中的
servicePort: 3000
设置为32093
. Warning :我从未测试过这个 . 我不知道Ingress是否支持这一点 . 根据文档,它应该是NodePort是ClusterIP的超集:Edit 顺便说一句:http://grafana.test.mydomain.com:32093应该已经可以使用您的配置(NodePort)