随着微服务越来越火,对于如何管理和暴露微服务,也出现了很多成熟的解决方案。本文以其中应用较多的Kong gateway为例,详细讲述如何通过gateway暴露内部服务。
如何暴露一个部署于k8s cluser里的微服务?LoadBalancer,Nodeport以及ClusterIP这三种都是比较常用的方式,而可以暴露到公网上让用户使用,则还需要配置ingress。但是如果对于需要暴露多个微服务到公网的场景,这种配置方式的缺点就比较突出:
1.配置多个ingress,不便于运维。
2.针对不同微服务,不便于进行网络控制。
Kong gateway其实就是将k8s内部的微服务api接口统一管理,统一由Kong gateway暴露,来供用户访问的方式。
对于Kong gateway的安装和add service,add route已经有很多文章都分享了。但是对于如何暴露k8s内部的服务却少有文章解析。接下来,我以prometheus服务为例,实现通过Kong gateway暴露服务。
- prometheus cluster安装:
helm install prometheus bitnami/prometheus
- kong gateway cluster安装:
helm install kong bitnami/kong
- 暴露kong gateway的admin url:
kubectl port-forward svc/kong 8080:80 &
4.配置prometheus ingress:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: apollo-config-portal
annotations:
kubernetes.io/ingress.class: "kong"
spec:
rules:
- http:
paths:
- path: /api/alert #路径
backend:
serviceName: prometheus-kube-prometheus-prometheus #apollo的service name
servicePort: 9090
5.通过kong gateway访问prometheus服务:
curl -i -X GET http://127.0.0.1:8080/api/alert
返回如下图
最后,再配置kong gateway的ingress(省略),便可以通过公网访问kong gateway来访问prometheus cluster了。
这里最重要的是第四步,如果给微服务的ingress配置了host,之后通过add service和add route则需要将service的host解析记录配置到dns服务中,如果不配置,则kong gateway无法正确解析url。
本文原创,引用请标明出处。