(官方版)使用helm3在gke集群中安装ingress-nginx
说明
前两篇文章已经讲解过nginx-ingress,nginx-ingress是由nginx官方推出的,今天讲解一下k8s社区推出的ingress-nginx。
另外gke上基础的东西我就不讲了,类似节点池的创建,在之前的文章都已经写过了,不太懂的可以翻看一下。
前置注意
k8s集群版本要求>=1.16.0-0
,所以如果没达到要求的,建议升级下~
步骤
下载最新的charts
1 2
| $ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx $ helm pull ingress-nginx/ingress-nginx
|
修改配置
1 2 3 4 5 6 7 8 9 10 11 12
| 1. image.repository,镜像需要梯子,注意 2. ingressClass这个改一改,设置你的ingress-controller组名 3. hostNetwork如果你用daemonset,请设置为true 4. kind,看你用什么方式了,deployment还是daemonset 5. nodeSelector,最好指定单独的节点池,这样业务和代理不混用 6. healthCheckPath,设置成你想要的健康检查uri 7. autoscaling,增加了hpa设置,可以看下 8. service.enabled默认是true,会生成一个loadbalancer类型的svc 9. internal,是否开启内部负载均衡器,对于云厂商需要设置不同的annotations,才行。对于gke来讲:`cloud.google.com/load-balancer-type: Internal`即可开启内部负载均衡器(注意:这个默认是用gke官方的ingress-controller,而不是我们本次安装的) 10. admissionWebhooks还没研究过是啥,暂时关闭 11. metrics开启,如果在gke上,设置type为NodePort 12. publishService.enable 修改成false,不然需要你为controller创建一个默认的svc
|
安装验证
1
| helm install my-ingress-nginx -n ingress-nginx .
|
完成上述安装之后,你可以看到会生成三个svc:
一个loadbalancer外网,一个loadbalancer内网,一个metrics的svc
接下来我们创建一个ingress资源,测试下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/enable-cors: "true" kubernetes.io/ingress.class: mt-ingress-eve-release #注意修改成你自己的ingressclass name: test-ingress namespace: monitoring spec: rules: - host: test.xx.com http: paths: - backend: serviceName: mt-prometheus-operator-prometheus servicePort: 9090 tls: - hosts: - test.xx.com secretName: x-xx-com-20201112
|
最佳实践
最佳配置:(适用于生产环境)
1 2 3 4 5 6 7 8 9
| 1.ingressClass,内网和公网分开,分别叫:internal-ingree-group,public-ingress-group 2.hostNetwork=true 3.kind=DaemonSet 4.service创建设为false 5.nodeSelector: nodetype=ingress 6.healthCheckPath自定义 7.metrics开启,port默认10254,注意防火墙规则是否打开(curl ip:10254/metrics) 8.defaultBackend最好打开下 9. publishService.enable 修改成false,不然需要你为controller创建一个默认的svc
|
安装外网的ingress-controller:
1
| helm install public-ingress-nginx -n ingress-nginx . --set controller.ingressClass=public-ingress-nginx
|
安装内网的ingress-controller:
1
| helm install inner-ingress-nginx -n ingress-nginx . --set controller.ingressClass=inner-ingress-nginx
|
安装完之后,创建lb负载均衡器,代理到ingress实例组里,跟这篇文章的最后部分一样了,不讲解了。跳转
最后你可以创建一个ingress资源测试下,看看效果。