侧边栏壁纸
博主头像
kevin's blog! 博主等级

行动起来,活在当下

  • 累计撰写 27 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

helm部署ingress-nginx

kevin
2024-03-30 / 0 评论 / 0 点赞 / 29 阅读 / 0 字

Ingress是一种Kubernetes资源,用于将外部流量路由到Kubernetes集群内的服务。与NodePort相比,它提供了更高级别的路由功能和负载平衡,可以根据HTTP请求的路径、主机名、HTTP方法等来路由流量。
因此,可以说Ingress是为了弥补NodePort在流量路由方面的不足而生的。使用NodePort,只能将流量路由到一个具体的Service,并且必须使用Service的端口号来访问该服务。但是,使用Ingress,就可以使用自定义域名、路径和其他HTTP头来定义路由规则,以便将流量路由到不同的Service。

[root@master1 ~]# kubectl api-resources | grep ingress
ingressclasses                                       networking.k8s.io/v1                   false        IngressClass
ingresses                         ing                networking.k8s.io/v1                   true         Ingress

此外,Ingress还可以与负载均衡器配合使用,以提供高可用性和水平扩展。这些功能使得Ingress比NodePort更适合在生产环境中使用。

v2-3a84bb12c9fdee2ed1badfafee082f76_1440w[1].webp

Ingress 是 Kubernetes 中的一个抽象资源,它提供了一种定义应用暴露入口的方法,可以帮助管理员在 Kubernetes 集群中管理多个服务的访问入口,方便用户访问。Ingress资源对象只是一个规范化的API对象,用于定义流量路由规则和 TLS 设置等信息。它本身不会直接处理或转发流量,而是需要配合一个 Ingress 控制器来实现。不同的 Ingress Controller 可能支持的功能和配置方式不同,需要根据实际情况进行选择和配置。

Ingress 控制器是一个独立的组件,它会监听 Kubernetes API 中的 Ingress 资源变化,并根据定义的路由规则配置负载均衡器、反向代理或其他网络代理,从而实现外部流量的转发。因此,可以将 Ingress 控制器视为 Ingress 资源的实际执行者。

总之,Kubernetes 的 Ingress 资源对象需要配合 Ingress 控制器才能实现外部流量的转发和路由。Ingress 控制器是 Ingress 资源的实际执行者,负责根据定义的路由规则配置网络代理。

主流的Ingress Controller
在 Kubernetes 中,有很多不同的 Ingress 控制器可以选择,例如 Nginx、Traefik、HAProxy、Envoy 等等。不同的控制器可能会提供不同的功能、性能和可靠性,可以根据实际需求来选择合适的控制器。Kubernetes生态系统中有许多不同的Ingress控制器可供选择,其中比较主流的有:

Nginx Ingress Controller:基于Nginx的Ingress控制器,提供了广泛的功能和配置选项。
Traefik Ingress Controller:Traefik是一个流行的反向代理和负载均衡器,Traefik Ingress Controller提供了灵活的配置选项和自动发现服务的功能。
Istio Ingress Gateway:Istio是一种服务网格,它提供了基于Envoy代理的Ingress Gateway来管理入站和出站流量。
Contour Ingress Controller:基于Envoy代理的Ingress控制器,具有高度可扩展性和灵活的路由规则。
Kong Ingress Controller:Kong是一个API网关,提供了可扩展的路由和服务管理功能。
Ambassador API Gateway:Ambassador是一个Kubernetes-native API Gateway,提供了自动化的服务发现和路由管理功能。

下面将使用来部署ingress-nginx

master(ingress-nginx边缘节点)

chart version:4.8.3 (k8s:1.28、1.27、1.26、1.25)

当前版本:k8s-v1.28.0
github地址:https://github.com/kubernetes/ingress-nginx

# 添加ingress-nginx的helm源
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

# 更新所有仓库
helm repo update

# 查看ingress-nginx版本
helm search repo ingress-nginx/ingress-nginx

# 拉取ingress-nginx
helm pull ingress-nginx/ingress-nginx --version 4.8.3 --untar

helm pull ingress-nginx/ingress-nginx --version 4.9.0 --untar

方式1:DaemonSet + HostNetwork + nodeSelector

# 创建ingress-nginx命名空间
kubectl create ns ingress-nginx

# 创建自定义values文件
cat > ~/ingress-nginx/values-prod.yaml << 'EOF'
controller:
  name: controller
  image:
    registry: dyrnq
    image: controller
    #tag: "v1.9.4"
    tag: "v1.9.5"
    digest:
    pullPolicy: IfNotPresent

  dnsPolicy: ClusterFirstWithHostNet

  hostNetwork: true

  publishService:  # hostNetwork 模式下设置为false,通过节点IP地址上报ingress status数据
    enabled: false

  kind: DaemonSet

  tolerations:   # kubeadm 安装的集群默认情况下 k8s-master 是有污点,需要容忍这个污点才可以部署
  - key: "node-role.kubernetes.io/master1"
    #operator: "Equal"
    effect: "NoSchedule"

  nodeSelector:   # 固定到k8s-master节点(自己master啥名字就写啥)
    kubernetes.io/hostname: "master1"

  service:  # HostNetwork 模式不需要创建service
    enabled: false

  admissionWebhooks: # 强烈建议开启 admission webhook
    enabled: true
    patch:
      enabled: true
      image:
        registry: dyrnq
        image: kube-webhook-certgen
        #tag: v20231011-8b53cabe0
        tag: v20231226-1a7112e06
        digest:
        pullPolicy: IfNotPresent

defaultBackend:
  enabled: true
  name: defaultbackend
  image:
    registry: dyrnq
    image: defaultbackend-amd64
    tag: "1.5"
    digest:
    pullPolicy: IfNotPresent
EOF

# 安装ingress-nginx
helm upgrade --install --namespace ingress-nginx ingress-nginx -f ~/ingress-nginx/values-prod.yaml .

方式2:MetalLB + Deployment + LoadBalancer(多副本、高可用)

# 创建ingress-nginx命名空间
kubectl create ns ingress-nginx

# 创建自定义values文件
cat > ~/ingress-nginx/values-prod.yaml << 'EOF'
controller:
  name: controller
  image:
    registry: dyrnq
    image: controller
    tag: "v1.9.4"
    digest:
    pullPolicy: IfNotPresent

  kind: Deployment
  replicaCount: 3  # 设置副本数为 3

  affinity: # 设置软策略
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - ingress-nginx
          topologyKey: kubernetes.io/hostname
        weight: 100

  admissionWebhooks: # 强烈建议开启 admission webhook
    enabled: true
    patch:
      enabled: true
      image:
        registry: dyrnq
        image: kube-webhook-certgen
        tag: v20231011-8b53cabe0
        digest:
        pullPolicy: IfNotPresent

defaultBackend:
  enabled: true
  name: defaultbackend
  image:
    registry: dyrnq
    image: defaultbackend-amd64
    tag: "1.5"
    digest:
    pullPolicy: IfNotPresent
EOF

# 安装ingress-nginx
helm upgrade --install --namespace ingress-nginx ingress-nginx -f ./values-prod.yaml .

ingress-nginx.png

0

评论区