在同一个k8s集群,定义多个ingress nginx实例

这个网上有一些参考,

最终我都测试在成功,并运用到在公司了。

作一个记录.

============================

概念

ingress可以简单理解为serviceservice,他通过独立的ingress对象来制定请求转发的规则,把请求路由到一个或多个service中。这样就把服务与请求规则解耦了,可以从业务维度统一考虑业务的暴露,而不用为每个service单独考虑。

ingress可以简单理解为serviceservice,他通过独立的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-dsconfigmap(通过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

猜你喜欢

转载自www.cnblogs.com/aguncn/p/12460832.html