Multiple Ingress controllers(多ingress部署)
admin
2023-04-04 13:03:19
0

背景:

1、业务有个性化需求,例如需要在nginx 上面部署agent 分析日志并做告警,但该业务不关注其他业务的日志

2、每次业务变更,nginx worker进程都得执行reload。随着业务体量增加,reload会越来越频繁,拆分ingress 可以有效避免业务互相影响


# 为机器加上不同的标签,如azone/bzone 用来区分A专区跟B专区

kubectl label node test-node-1.1.1.1 ingress-role="azone" 

kubectl label node test-node-2.2.2.2 ingress-role="bzone"


# 创建ingress

root@ubuntu:/home/test# kubectl apply -f nginx-ingress-controller-ds-azone.yml 

root@ubuntu:/home/test# kubectl apply -f nginx-ingress-controller-ds-bzone.yml


# 查看部署ingress实例

root@ubuntu:/home/test# kubectl get pod -n kube-system -o wide |grep nginx 

azone-nginx-ingress-controller-d92zq      1/1       Running   0          2m        10.26.129.21     test-node-1.1.1.1

bzone-nginx-ingress-controller-dswv9   1/1       Running   0          2m        10.26.129.22    test-node-2.2.2.2


# nginx-controller 配置如下

apiVersion: extensions/v1beta1

kind: DaemonSet

metadata:

  name: azone-nginx-ingress-controller

  labels:

    app: ingress-nginx

  namespace: kube-system

spec:

  template:

    metadata:

      labels:

        app: ingress-nginx

      annotations:

        prometheus.io/scrape: "true"

        prometheus.io/port: "10254"

        prometheus.io/type: "ingress-nginx"

    spec:

      hostNetwork: true

      tolerations:

      - key: "node-role.kubernetes.io/ingress"

        operator: "Equal"

        value: "true"

        effect: "NoSchedule"

      nodeSelector:

        node-role.kubernetes.io/ingress: "true"

        ingress-role: "azone"                        # 添加指定标签,绑定固定部署机器

      serviceAccountName: admin

      containers:

        - name: azone-nginx-ingress-controller

          image: registry.cn-hangzhou.aliyuncs.com/test/ingress-controller:0.15.0-10

          args:

            - /nginx-ingress-controller

            - --default-backend-service=$(POD_NAMESPACE)/default-http-backend

            - --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

            - --v=2

            - --enable-dynamic-configuration=true

            - --ingress-class=azone                # 指定ingress-class 属性

          env:

            - name: POD_NAME

              valueFrom:

                fieldRef:

                  fieldPath: metadata.name

            - name: COLLECT_LOG_DOCKER_DATA_WEBLOG

              value: "true"

            - name: POD_NAMESPACE

              valueFrom:

                fieldRef:

                  fieldPath: metadata.namespace

          ports:

          - name: http

            containerPort: 80

          - name: https

            containerPort: 443

  

          volumeMounts:

          - name: localtime-config

            mountPath: /etc/localtime

          livenessProbe:

            failureThreshold: 3

            httpGet:

              path: /healthz

              port: 10254

              scheme: HTTP

            initialDelaySeconds: 10

            periodSeconds: 10

            successThreshold: 1

            timeoutSeconds: 1

          readinessProbe:

            failureThreshold: 3

            httpGet:

              path: /healthz

              port: 10254

              scheme: HTTP

            periodSeconds: 10

            successThreshold: 1

            timeoutSeconds: 1

      volumes:

        - name: localtime-config

          hostPath:

            path: /etc/localtime



# 创建 ingress,配置里面绑定class

root@ubuntu:/home/test# cat azone-test.aaa.com-ingress.yml

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

  name: azone-test-ingress-https

  annotations:

    kubernetes.io/ingress.class: "azone"                    # 绑定ingress-class

    nginx.ingress.kubernetes.io/ssl-redirect: "false"

spec:

  rules:

  - host: azone-test.aaa.com

    http:

      paths:

      - path: /

        backend:

          serviceName: azone-test-svc

          servicePort: 80


# 查看绑定情况

root@ubuntu:/home/wuguihong1# kubectl -n kube-system get pod -o wide|grep nginx

azone-ingress-controller-d92zq    1/1       Running   0          16h       10.26.129.21    test-node-1.1.1.1

bzone-ingress-controller-62458   1/1       Running   0          15h       10.26.129.22    test-node-2.2.2.2



root@ubuntu:/home/test# kubectl -n kube-system exec  azone-ingress-controller-d92zq cat /etc/nginx/nginx.conf |grep azone-test.aaa.com

server_name azone-test.aaa.com ;


root@ubuntu:/home/test# kubectl -n kube-system exec bzone-ingress-controller-62458  cat /etc/nginx/nginx.conf|grep azone-test.aaa.com


可以看到2台node节点上各运行一个ingress-controller , 并且azone 上面绑定了azone-test.aaa.com 的域名,而bzone 上面没绑定


参考资料:

Multiple Ingress controllers

https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/


相关内容

热门资讯

特朗普下令不打了,美国的“余粮... 可以说戛然而止,快得让很多人都无法适应。前两周,每一天美国都要打击伊朗一通。就在7月24日白宫会议前...
穆杰塔巴最新表态:支持黎真主党 △伊朗最高领袖穆杰塔巴·哈梅内伊(资料图)当地时间7月26日晚,伊朗最高领袖穆杰塔巴·哈梅内伊对黎巴...
美军瘫痪一艘驶向伊朗的油轮,特... 美国总统特朗普虽下令暂停打击伊朗,但美军仍在执行对霍尔木兹海峡的封锁任务。针对美军瘫痪一艘驶向伊朗油...
“小牌大耍”的底气到底是哪里来... 澎湃首席评论员 李平这两天,“艺人李权哲乘高铁占座事件”在网上引发热议,该艺人参加的活动主办方曾发布...
越南籍船舶南海遇险沉没,中方已... 据凤凰卫视报道,一艘越南船舶7月24日夜间在越南庆和以东220海里附近遇险沉没,船上共62名越南籍人...
李权哲占座、蒙面、装死:娱乐圈... 你买了一张高铁一等座的票,找到自己的位置,18A。有人坐着。你拿出手机看了眼购票记录——没错,18A...
杭州景区咖啡店闯入1条幼蛇,仅... 夏天气温高、湿度大,蛇类活动进入高峰期,千万别被“小蛇无害”的刻板印象骗了!有些幼蛇看着迷你可爱,实...
AI开源公开信签署企业增至50... IT之家 7 月 26 日消息,英伟达、微软、IBM、Meta 等 25 家美国科技企业本周(7 月...
南阳快手短视频代运营企业的服务... 在短视频平台快速发展的背景下,企业通过快手等渠道进行内容运营已成为常见的市场动作。对于希望借助短视频...
普通人该如何跟上科技发展的步伐 这个被称作科技的词汇, 听起来既有宏大之感, 又颇为遥远, 好似仅仅归属于在实验室里专心致志钻研的科...