暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Helm 实现高可用 Ingress 部署攻略

Linux运维智行录 2024-09-05
34

随着微服务架构的普及,Kubernetes 成为了许多现代应用程序的基础平台。Ingress 控制器作为 Kubernetes 集群的一个重要组成部分,负责管理进入集群的 HTTP 和 HTTPS 流量,通过路由规则将请求转发到不同的服务。为了保证系统的高可用性和稳定性,部署一个可靠的 Ingress 控制器至关重要。本文将指导您如何使用 Helm 包管理器来部署一个高可用的 Ingress 控制器,从而简化您的流量管理任务。


ingress-nginx


01
支持的版本表
SupportedIngress-NGINX versionk8s supported versionAlpine VersionNginx VersionHelm Chart Version
🔄v1.11.21.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.2
🔄v1.11.11.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.1
🔄v1.11.01.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.0
🔄v1.10.41.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.4
🔄v1.10.31.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.3
🔄v1.10.21.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.2
🔄v1.10.11.30, 1.29, 1.28, 1.27, 1.263.19.11.25.34.10.1
🔄v1.10.01.29, 1.28, 1.27, 1.263.19.11.25.34.10.0

v1.9.61.29, 1.28, 1.27, 1.26, 1.253.19.01.21.64.9.1

v1.9.51.28, 1.27, 1.26, 1.253.18.41.21.64.9.0

v1.9.41.28, 1.27, 1.26, 1.253.18.41.21.64.8.3

v1.9.31.28, 1.27, 1.26, 1.253.18.41.21.64.8.*

v1.9.11.28, 1.27, 1.26, 1.253.18.41.21.64.8.*

v1.9.01.28, 1.27, 1.26, 1.253.18.21.21.64.8.*

v1.8.41.27, 1.26, 1.25, 1.243.18.21.21.64.7.*

v1.7.11.27, 1.26, 1.25, 1.243.17.21.21.64.6.*

v1.6.41.26, 1.25, 1.24, 1.233.17.01.21.64.5.*

v1.5.11.25, 1.24, 1.233.16.21.21.64.4.*

v1.4.01.25, 1.24, 1.23, 1.223.16.21.19.10†4.3.0

v1.3.11.24, 1.23, 1.22, 1.21, 1.203.16.21.19.10†4.2.5

Tip:摘抄GitHub ingress-nginx项目说明,具体链接地址。请查看下面的参考文档


02
helm部署ingress-nginx

部署高可用思路:

  • ingress-nginx部署两个副本数,使用pod反亲和。将两个pod调度到不同的节点上。

  • ingress-nginx前面挂一个负载均衡器,流量平分两个副本上




部署ingress-nginx


1、下载ingress-nginx chart包

$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

$ helm pull ingress-nginx/ingress-nginx --untar --untardir /etc/kubernetes/addons --version 4.11.2


2、部署 ingress-nginx 配置文件

$ cat<<'EOF' | sudo tee /etc/kubernetes/addons/ingress-nginx-value.yml > /dev/null
controller:
  # 两个副本数
  replicaCount: 2

  # 部署模式
  kind: Deployment
  image:
    registry: 172.139.20.170:5000
    image: library/controller
    tag: "v1.11.2"
    digest: ''

  # pod反亲和
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchExpressions:
        - key: app.kubernetes.io/component
          operator: In
          values:
          - controller
      topologyKey: kubernetes.io/hostname

  # 标签选择器
  nodeSelector:
    ingress-nginx: controller

  # service配置
  service:
    type: NodePort
    externalTrafficPolicy: Local
    nodePorts:
      http: "30080"
      https: "30443"

  # 配置metrics采集
  metrics:
    enabled: true
    port: 10254

  # 优雅推出
  lifecycle:
    preStop:
      exec:
        command:
          - /wait-shutdown

  admissionWebhooks:
    patch:
      enabled: true
      image:
        registry: 172.139.20.170:5000
        image: library/kube-webhook-certgen
        tag: 'v1.4.3'
        digest: ''
EOF


3、部署ingress-nginx

$ kubectl label node k8s-node01 ingress-nginx=controller 
node/k8s-node01 labeled

$ kubectl label node k8s-node02 ingress-nginx=controller
node/k8s-node02 labeled

$ helm install -n kube-system ingress-nginx -f /etc/kubernetes/addons/ingress-nginx-value.yml /etc/kubernetes/addons/ingress-nginx  




haproxy负载ingress-nginx流量


1、负载ingress-nginx流量

listen ingress-http-tcp
  bind *:80
  server ingress01 172.139.20.175:30080 maxconn 32 check
  server ingress02 172.139.20.75:30080  maxconn 32 check
listen ingress-https-tcp
  bind *:443
  server ingress01 172.139.20.175:30443 maxconn 32 check
  server ingress02 172.139.20.75:30443  maxconn 32 check


Tip:使用负载apiserver的haproxy服务上,添加以上配置即可

2、修改docker-compose文件

$ cat /etc/haproxy/docker-compose.yml 
name: haproxy
services:
  haproxy:
    container_name: haproxy
    image: haproxy:2.9-alpine
    restart: always
    volumes:
    - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    ports:
    # 添加以下4行配置
    - 80:80
    - 443:443
    sysctls:
    - net.ipv4.ip_unprivileged_port_start=0

Tip:net.ipv4.ip_unprivileged_port_start=0参数,需要内核4.x版本

3、重启haproxy服务

$ sudo docker-compose -f /etc/haproxy/docker-compose.yml restart


03
验证ingress

1、验证pod状态

$ kubectl -n kube-system get pod -l app.kubernetes.io/instance=ingress-nginx
NAME                                       READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-579f7d8f4-8jmlw   1/1     Running   0          3h42m
ingress-nginx-controller-579f7d8f4-tf5wc   1/1     Running   0          3h42m

2、验证服务是否可用


04
参考文档

ingress-nginx官方文档:

  • https://kubernetes.github.io/ingress-nginx/

  • https://github.com/kubernetes/ingress-nginx?tab=readme-ov-file#supported-versions-table


05
结语

通过 Helm 部署高可用的 Ingress 控制器不仅简化了配置流程,还增强了系统的健壮性。无论是在开发还是生产环境中,这样的部署方式都能帮助我们更好地管理应用的流量,确保服务的连续性和可靠性。


别忘了,关注我们的公众号,获取更多关于容器技术和云原生领域的深度洞察和技术实战,让我们携手在技术的海洋中乘风破浪!

END

文章转载自Linux运维智行录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论