这个网上有一些参考,
最终我都测试在成功,并运用到在公司了。
作一个记录.
============================
概念
ingress可以简单理解为service的service,他通过独立的ingress对象来制定请求转发的规则,把请求路由到一个或多个service中。这样就把服务与请求规则解耦了,可以从业务维度统一考虑业务的暴露,而不用为每个service单独考虑。
ingress可以简单理解为service的service,他通过独立的ingress对象来制定请求转发的规则,把请求路由到一个或多个service中。这样就把服务与请求规则解耦了,可以从业务维度统一考虑业务的暴露,而不用为每个service单独考虑。
在同一个k8s集群里,部署两个ingress nginx。一个deploy部署给A的API网关项目用。另一个daemonset部署给其它项目作域名访问用。这两个项目的更新频率和用法不一致,暂时不用合成一个。
方案
A项目组的,按标准的yaml文档作部署。而更改daemonset的配置文件,让其支持不同的ingress-class名称。
步骤
1.更新ingress-controller的启动参数(在yaml文件中)
containers:
- name: nginx-ingress-controller
image: harbor.demo.cn/3rd_part/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
- --annotations-prefix=nginx.ingress.kubernetes.io
# - --publish-service=$(POD_NAMESPACE)/ingress-nginx
- --report-node-internal-ip-address
- --ingress-class=ngx-ds
- --election-id=ingress-controller-leader-bg
- λ--ingress-class=ngx-ds 当设置这个参数后只会Watch Ingress class为 ngx-ds的
- λ--election-id= ingress-controller-leader-bg 用于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
2.更新configmap对应的resourceName(在yaml文件中)
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
name: nginx-ingress-role
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
rules:
- apiGroups:
- ""
resources:
- configmaps
- pods
- secrets
- namespaces
verbs:
- get
- apiGroups:
- ""
resources:
- configmaps
resourceNames:
# Defaults to "-"
# Here: "-"
# This has to be adapted if you change either parameter
# when launching the nginx-ingress-controller.
# - "ingress-controller-leader-nginx"
- "ingress-controller-leader-bg-ngx-ds"
- λ注意:这里的名称是<election-id>-<ingress-class>拼接而成
- λ此段主要是允许访问一个叫ingress-controller-leader-ngx-ds的configmap(通过RoleBinding绑定从而限制针对某一个命名空间中定义的一个ConfigMap实例的访问)
3.应用到群集
Kubectl apply -f (SIS-ITIL-INGRESS-NGX)
4.更改Ingress配置文件,指向新的ingress实例。
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: other-ngx-k8s
namespace: other-ngx
annotations:
kubernetes.io/ingress.class: "ngx-ds"
spec:
rules:
- host: other-ngx-k8s.demo.com.cn
http:
paths:
- path: /
backend:
serviceName: other-ngx-k8s-ngx-svc
servicePort: 9001