Ingress-Nginx高可用

Ingress-Nginx高可用 以最新版的nginx-ingress-controller:0.30.0为例 高可用Ingress 架构如下:

Ingress-Nginx高可用

以最新版的nginx-ingress-controller:0.30.0为例 

高可用Ingress 架构如下:

attachments-2020-09-h0ebx3HV5f70dc6937bea,png


打开 https://github.com/kubernetes/ingress-nginx/blob/master/deploy/static/mandatory.yaml 然后Raw下载mandatory.yaml,修改其中的 nginx-ingress-controller 部分,也就是官网上的 with-rbac.yaml

1、修改Deployment为DaemonSet,并注释掉副本数

2、启用hostNetwork网络,并指定运行节点

hostNetwork暴露ingress-nginx controller的相关业务端口到主机,这样node节点主机所在网络的其他主机,都可以通过该端口访问到此应用程序。

nodeSelector指定之前添加ingress-controller=true标签的node

3、修改镜像地址

4、增加master节点容忍(可选)

tolerations: #增加容忍,可分配到master节点
- key: "node-role.kubernetes.io/master"
  operator: "Exists"
  effect: "NoSchedule"

 

修改完成后:

apiVersion: apps/v1

#kind: Deployment

kind: DaemonSet

metadata:

  name: nginx-ingress-controller

  namespace: ingress-nginx

  labels:

    k8s-app: ingress-controller

spec:

  #replicas: 1

  selector:

    matchLabels:

      k8s-app: ingress-controller

  template:

    metadata:

      labels:

        k8s-app: ingress-controller

      annotations:

        prometheus.io/port: "10254"

        prometheus.io/scrape: "true"

    spec:

      # wait up to five minutes for the drain of connections

      terminationGracePeriodSeconds: 300

      serviceAccountName: nginx-ingress-serviceaccount

      hostNetwork: true

      nodeSelector:

        ingress-controller: "true"

      tolerations: #增加容忍,可分配到master节点

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

          operator: "Exists"

          effect: "NoSchedule"

      containers:

        - name: nginx-ingress-controller

          image: registry-vpc.cn-beijing.aliyuncs.com/base/nginx-ingress-controller:0.30.0

          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

          securityContext:

            allowPrivilegeEscalation: true

            capabilities:

              drop:

                - ALL

              add:

                - NET_BIND_SERVICE

            # www-data -> 101

            runAsUser: 101

          env:

            - name: POD_NAME

              valueFrom:

                fieldRef:

                  fieldPath: metadata.name

            - name: POD_NAMESPACE

              valueFrom:

                fieldRef:

                  fieldPath: metadata.namespace

          ports:

            - name: http

              containerPort: 80

              #protocol: TCP

            - name: https

              containerPort: 443

              #protocol: TCP

          livenessProbe:

            failureThreshold: 3

            httpGet:

              path: /healthz

              port: 10254

              scheme: HTTP

            initialDelaySeconds: 10

            periodSeconds: 10

            successThreshold: 1

            timeoutSeconds: 10

          readinessProbe:

            failureThreshold: 3

            httpGet:

              path: /healthz

              port: 10254

              scheme: HTTP

            periodSeconds: 10

            successThreshold: 1

            timeoutSeconds: 10

          lifecycle:

            preStop:

              exec:

                command:

                  - /wait-shutdown



节点打标签:

# kubectl label node master-92 ingress-controller="true"

此时再使用keepalived或外部slb进行高可用设置即可。

 

  • 发表于 2020-09-28 02:39
  • 阅读 ( 47 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章