(官方版)使用helm3在gke集群中安装ingress-nginx

说明

前两篇文章已经讲解过nginx-ingress,nginx-ingress是由nginx官方推出的,今天讲解一下k8s社区推出的ingress-nginx。
另外gke上基础的东西我就不讲了,类似节点池的创建,在之前的文章都已经写过了,不太懂的可以翻看一下。

前置注意

k8s集群版本要求>=1.16.0-0,所以如果没达到要求的,建议升级下~

步骤

  • 下载最新的charts
  • 修改配置
  • 安装验证

下载最新的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
png1

接下来我们创建一个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资源测试下,看看效果。