背景
我们的业务目前在gke上是使用的自带的ingress服务,直接对接他们的loadbalancer服务,上几篇文章写的是安装prometheus,发现获取不到代理层的一些数据,所以想直接自己撸ingress-controller来实现。
备注:gke上的stackdriver虽然可以看到比较多的数据,但是关于loadbalancer,他没有具体的域名数据,所以比较不直观。
描述
我们使用ingress-controller的姿势其实有很多,一般有:
- deployment + loadbalancer模式的service
- daemonset + hostnetwork + nodeselector
具体可以参考这篇博客,我一个朋友写的:跳转
我分成两篇文章写吧!
这里着重讲一句,ingress-nginx和nginx-ingress是两个不同的,一个是k8s社区推出的,一个是nginx推出的,本篇文章是按照nginx-ingress讲的,接下来会讲ingress-nginx,这个也会作为以后默认的官方使用版本
步骤
- 创建gke ingress 节点池
- 下载最新的helm charts
- 修改配置文件
- 安装验证
- 增加lb代理到ingress-controller机器
- 验证流量
创建节点池
目前测试,在控制台创建ingress节点池,默认是不会打开防火墙的http和https规则,所以会影响你后续的流量访问。
那么通过查看文档发现,可以直接使用gcloud来创建节点池,并指定打开http和https防火墙规则。
gcloud命令参考:
重要的就是--tags=http-server,https-server
这个参数
(其中–cluster,–zone,–node-labels,–machine-type这些你都可以自定义,具体的参数请参考:官方文档)
1 | gcloud container node-pools create nodepool-ingress --cluster=gke-cluster-name --zone us-central1-c --tags=http-server,https-server --num-nodes=1 --node-labels=nodetype=ingress --enable-autoscaling --max-nodes=3 --min-nodes=1 --disk-size=50 --machine-type=n2-custom-2-4096 --project projectName |
下载charts
1 | helm repo add nginx-stable https://helm.nginx.com/stable |
1 | helm pull nginx-stable/nginx-ingress |
修改配置文件
既然我们选择了deamonset+hostnetwork+nodeselector的方式来部署,那么我们主要修改以下内容:
1 | vim values.yaml |
安装验证
1 | helm install nginx-ingress -n ingress-controller . |
由于是daemonset方式部署,所以当你扩容ingress节点池,他pod也会自动伸缩的
1 | kubectl get daemonset -n ingress-controller |
通过hostnetwork的方式,就是把容器暴露的端口映射到宿主机上,容器目前是暴露80和443端口,所以你在宿主机也能看到这两个端口,由于gke的节点是不允许登录的,所以我们直接telnet验证下就行了。
另外也可以看看健康检查是否正常:
增加lb代理到ingress-controller
1.创建tcp
负载均衡器,然后选择后端实例组,也就是你创建nodepool的时候自动创建的实例组
2.创建健康检查,就是你上面在values.yaml中定义的
3.创建前端转发配置,分别是80和443
4.最后查看下glb创建的结果以及健康检查的状态
验证流量
拿到glb的ip之后,添加一个ingress资源,添加的ingress资源需要设置kubernetes.io/ingress.class:
这个annotations,在前面已经定义了ingressClass为mt-ingress-eve-release,这个能解决你一个集群中有多个ingress-controller,可以通过这个标签来判断你的ingress资源应该被哪个ingress-controller接管。
(注意:secret要在这个ns下创建好)
1 | apiVersion: extensions/v1beta1 |
然后本地绑定一个host先测试下是否能够访问到。
通过ingress-controller的日志可以看到是没问题的:
额外讲一句
由于gke的机器是不允许的登录的,所以通过这种方式创建的ingress-controller,你是没有办法日志落盘的,所以搞不定。
在额外讲一句
安装好之后默认是打开了metrics的,所以你就可以创建一个servicemonitor,把数据收集到你prometheus中,如果你不懂这个是啥,请欣赏之前的文章,在gke中安装prometheus-operaotor。
或者也可以配置prometheus自动收集集群中的metrics数据
可以看看他默认提供了什么信息,默认的端口是9113。
(注意:需要打开防火墙规则,放开9113端口,默认是不行的)
1 | curl 10.10.182.28:9113/metrics |