入口规则,将流量路由到入口控制器服务
Ingress rule, routing traffic to ingress controller service
我需要帮助将流量路由到 Ingress controller's
自己的服务之一,metric service
。
我已经部署了一个 Nginx Ingress Controller
并启用了 metrics
选项,它会在控制器 internal-controller
的名称之后自动创建名称为 internal-controller-metrics
的服务。该服务有端口 10254/TCP
来抓取指标,如果我从集群内发出 curl 请求,我可以看到这些指标。
但我想从外部 Prometheus
scraper 抓取那些。
因此,我想将请求路由到此服务,为此我编写了以下入口规则。但是请求 curl http://dnsname.of.ingress.controller.com/metric/metrics
,它以 404
.
响应
apiVersion: v1
items:
- apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx-internal
name: metrics-ingress
spec:
rules:
- host: dnsname.of.ingress.controller.com
http:
paths:
- backend:
service:
name: nginx-internal-controller-metrics
port:
number: 10254
path: /metric(/|$)(.*)
pathType: Prefix
kind: List
我无法在控制器日志中找到任何请求未路由的原因。
Nginx 控制器版本为 nginx version: nginx/1.20.1
GKE 节点版本 1.17.17
.
谢谢
这是我从外部获取 nginx 控制器指标所做的工作:
使用 documentation 中的以下命令安装了 nginx-controller:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin \
--user $(gcloud config get-value account)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/cloud/deploy.yaml
然后我更改了服务清单和部署清单以根据 documentation(好吧,差不多)公开服务:
服务:
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "10254"
..
spec:
ports:
- name: prometheus
port: 10254
targetPort: prometheus
..
部署(文档更改了 DaemonSet,这对我来说不存在):
..
ports:
- name: prometheus
containerPort: 10254
..
然后我检查我的控制器的外部 IP:
k get svc -n ingress-nginx | grep 10254
ingress-nginx-controller LoadBalancer 10.140.7.150 35.xxx.xx.xx 10254:32677/TCP,80:31999/TCP,443:30632/TCP 52m
为指标卷曲外部 ip:
curl -s 35.xxx.xx.xx:10254/metrics | head -5
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 4.9442e-05
go_gc_duration_seconds{quantile="0.25"} 0.000166662
go_gc_duration_seconds{quantile="0.5"} 0.000188861
更新:
为了让它与 Ingress 一起工作,我是这样做的:
我创建了一个 Cloud DNS A 记录,指向我的负载均衡器,然后从以下清单创建了一个 Ingress 对象:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
name: metrics-ingress
spec:
rules:
- host: <Cloud-DNS-A-record>
http:
paths:
- backend:
service:
name: ingress-nginx-controller
port:
number: 10254
path: /metric(/|$)(.*)
pathType: Prefix
并将其应用于我的集群
k apply -f ingress.yaml -n ingress-nginx
然后我在浏览器中打开了这个页面以查看指标:
http:///Cloud-DNS-A-Record/metric/metrics
我需要帮助将流量路由到 Ingress controller's
自己的服务之一,metric service
。
我已经部署了一个 Nginx Ingress Controller
并启用了 metrics
选项,它会在控制器 internal-controller
的名称之后自动创建名称为 internal-controller-metrics
的服务。该服务有端口 10254/TCP
来抓取指标,如果我从集群内发出 curl 请求,我可以看到这些指标。
但我想从外部 Prometheus
scraper 抓取那些。
因此,我想将请求路由到此服务,为此我编写了以下入口规则。但是请求 curl http://dnsname.of.ingress.controller.com/metric/metrics
,它以 404
.
apiVersion: v1
items:
- apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx-internal
name: metrics-ingress
spec:
rules:
- host: dnsname.of.ingress.controller.com
http:
paths:
- backend:
service:
name: nginx-internal-controller-metrics
port:
number: 10254
path: /metric(/|$)(.*)
pathType: Prefix
kind: List
我无法在控制器日志中找到任何请求未路由的原因。
Nginx 控制器版本为 nginx version: nginx/1.20.1
GKE 节点版本 1.17.17
.
谢谢
这是我从外部获取 nginx 控制器指标所做的工作:
使用 documentation 中的以下命令安装了 nginx-controller:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin \
--user $(gcloud config get-value account)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/cloud/deploy.yaml
然后我更改了服务清单和部署清单以根据 documentation(好吧,差不多)公开服务:
服务:
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "10254"
..
spec:
ports:
- name: prometheus
port: 10254
targetPort: prometheus
..
部署(文档更改了 DaemonSet,这对我来说不存在):
..
ports:
- name: prometheus
containerPort: 10254
..
然后我检查我的控制器的外部 IP:
k get svc -n ingress-nginx | grep 10254
ingress-nginx-controller LoadBalancer 10.140.7.150 35.xxx.xx.xx 10254:32677/TCP,80:31999/TCP,443:30632/TCP 52m
为指标卷曲外部 ip:
curl -s 35.xxx.xx.xx:10254/metrics | head -5
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 4.9442e-05
go_gc_duration_seconds{quantile="0.25"} 0.000166662
go_gc_duration_seconds{quantile="0.5"} 0.000188861
更新: 为了让它与 Ingress 一起工作,我是这样做的:
我创建了一个 Cloud DNS A 记录,指向我的负载均衡器,然后从以下清单创建了一个 Ingress 对象:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
name: metrics-ingress
spec:
rules:
- host: <Cloud-DNS-A-record>
http:
paths:
- backend:
service:
name: ingress-nginx-controller
port:
number: 10254
path: /metric(/|$)(.*)
pathType: Prefix
并将其应用于我的集群
k apply -f ingress.yaml -n ingress-nginx
然后我在浏览器中打开了这个页面以查看指标: http:///Cloud-DNS-A-Record/metric/metrics