ingress-nginx多实例类型

背景

在生产环境中,都需要将nginx分不同类型,比方说内网与外网等等,下面我来介绍下怎么区分类型。

方案

此段主要是允许访问一个叫ingress-controller-leader-nginx-backend-nginx-backend的configmap(通过RoleBinding绑定从而限制针对某一个命名空间中定义的一个ConfigMap实例的访问)

1
2
3
4
5
6
7
8
9
10
11
12
13
- apiGroups:
- ""
resources:
- configmaps
resourceNames:
# Defaults to "<election-id>-<ingress-class>"
# Here: "<ingress-controller-leader>-<nginx>"
# This has to be adapted if you change either parameter
# when launching the nginx-ingress-controller.
- "ingress-controller-leader-nginx-backend-nginx-backend"
verbs:
- get
- update

在如下args段中我们新增了几个参数:

  • --ingress-class=nginx-backend 当设置这个参数后只会Watch Ingress class为nginx-backend的
  • --election-id=ingress-controller-leader-nginx-backend 用于Ingress状态更新的选举ID。(默认ingress-controller-leader
  • --report-node-internal-ip-address 默认情况下是–publish-service但是在裸机部署的时候要使用kubectl get ingress无法显示ADDRESS,所以我们需要使用–report-node-internal-ip-address参数

删除:

  • --publish-service=$(POD_NAMESPACE)/ingress-nginx 非公有云情况下使用kubectl get ingress无法显示ADDRESS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
containers:
- name: nginx-ingress-controller
image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1
args:
- /nginx-ingress-controller
- --configmap=$(POD_NAMESPACE)/nginx-configuration
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
- --udp-services-configmap=$(POD_NAMESPACE)/udp-services
#- --publish-service=$(POD_NAMESPACE)/ingress-nginx
- --annotations-prefix=nginx.ingress.kubernetes.io
# 设置controller日志的输出路径和方式
- --log_dir=/var/log/nginx/
- --logtostderr=false
- --v=2
- --report-node-internal-ip-address
- --ingress-class=nginx-backend
- --election-id=ingress-controller-leader-nginx-backend

做完这些,如果想实现完全隔离开,需要新建不同的ns,包括clusterrole等需要改下name。不清楚的可以联系我怎么改。

参考链接

Donate