首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何配置 Kubernetes Ingress 以支持外部负载均衡器和自定义镜像

如何配置 Kubernetes Ingress 以支持外部负载均衡器和自定义镜像

作者头像
用户8589624
发布2025-11-15 13:14:39
发布2025-11-15 13:14:39
780
举报
文章被收录于专栏:nginxnginx
如何配置 Kubernetes Ingress 以支持外部负载均衡器和自定义镜像

Kubernetes 中的 Ingress 是一个 API 资源,用于管理外部访问集群中服务的方式,通常用于 HTTP 和 HTTPS 路由。Ingress Controller 是实现 Ingress 资源的控制器,它的功能是根据 Ingress 的定义创建负载均衡规则,并处理进出 Kubernetes 集群的流量。本文将讨论如何配置 Kubernetes 中的 Ingress 资源、如何指定外部负载均衡器以及如何选择容器镜像源。

1. Kubernetes Ingress 资源概述

在 Kubernetes 集群中,Ingress 资源用于暴露 HTTP 和 HTTPS 路由流量到服务。Ingress 控制器(如 Nginx Ingress Controller)会根据 Ingress 资源中的规则将流量引导到指定的服务。Ingress 控制器本身也可以配置为使用外部负载均衡器,这样可以让流量更好地分发到集群的各个节点。

Ingress 的工作原理
  • Ingress 资源:定义了路由规则和规则作用的服务。
  • Ingress Controller:监听集群中的 Ingress 资源,并根据规则配置负载均衡、路由、TLS 证书等。
  • 外部负载均衡器:如果使用外部负载均衡器(如腾讯云 CLB、AWS ELB 等),Ingress Controller 可以与负载均衡器进行集成,帮助将流量分配到集群中的服务。
2. 创建和配置 Ingress 资源

我们可以通过 YAML 文件配置 Ingress 资源。以下是一个基础的 Ingress 资源配置,它包含了一个外部负载均衡器、Nginx Ingress 控制器以及其他相关设置。

配置示例
代码语言:javascript
复制
apiVersion: cloud.tencent.com/v1alpha1
kind: NginxIngress
metadata:
  name: liantong-ingress
spec:
  ingressClass: liantong-ingress  # 设置 IngressClass
  service:
    annotation:
      service.kubernetes.io/tke-existed-lbid: clb-22j2yhb6mvkzk7r2qr1711z24  # 指定已有的TKE负载均衡器ID
    type: LoadBalancer  # 设置为 LoadBalancer 类型,支持外部访问
  workLoad:
    replica: 1  # 设置副本数量
    hpa:
      enable: false  # 不启用自动扩展
      maxReplicas: 2  # 最大副本数为2
    template:
      container:
        image: ccr.ccs.tencentyun.com/tkeimages/nginx-ingress-controller:v1.6.4  # 指定 NGINX Ingress 镜像
        imagePullSecrets:
          - name: qcloudregistrykey  # 镜像凭证
        resources:
          limits:
            cpu: "8"  # 限制 CPU 使用
            memory: 1024Mi  # 限制内存使用
          requests:
            cpu: "4"  # 请求的 CPU 资源
            memory: 256Mi  # 请求的内存资源
    type: deployment  # 工作负载类型为 deployment
主要参数解释
  1. ingressClass: 定义了 Ingress 资源的类型和选择器。liantong-ingress 是一个自定义的 IngressClass,用于匹配和处理该资源。
  2. service.annotation: 该注释字段指定了负载均衡器的配置。特别是,service.kubernetes.io/tke-existed-lbid 字段指定了腾讯云负载均衡器的 ID。通过这种方式,Ingress 控制器会使用现有的 CLB(Cloud Load Balancer)进行流量分配。
  3. type: LoadBalancer: 通过指定 LoadBalancer 类型的服务,Kubernetes 会创建一个外部负载均衡器来接收来自外部的请求,并将请求转发到相应的服务。
  4. hpa.enable: false: 禁用 Horizontal Pod Autoscaler(水平 Pod 自动扩展),这意味着该工作负载不会根据流量自动扩展副本数。
  5. container.image: 在这里我们指定了镜像地址为腾讯云的私有仓库 ccr.ccs.tencentyun.com/tkeimages/nginx-ingress-controller:v1.6.4。这使得 Kubernetes 在启动 Ingress 控制器时使用该镜像。
  6. imagePullSecrets: 指定从私有镜像仓库拉取镜像时所需的凭证。在此示例中,使用了名为 qcloudregistrykey 的 Secret,该 Secret 存储了访问腾讯云容器镜像仓库的凭证。
  7. resources: 配置了容器的资源请求和限制,确保在集群中分配足够的 CPU 和内存资源。
3. 配置外部负载均衡器

如果你使用腾讯云 TKE(腾讯云容器引擎)或其他支持外部负载均衡器的云服务,可以通过注释字段来配置已有的负载均衡器。上面的 YAML 配置中使用了 service.kubernetes.io/tke-existed-lbid 来指定已有的负载均衡器 ID。

腾讯云的 TKE 提供了 CLB(Cloud Load Balancer)来将流量路由到 Kubernetes 服务。你可以使用已有的 CLB,也可以通过 Kubernetes 自动创建一个新的负载均衡器。

4. 配置容器镜像和仓库

在 Kubernetes 中,你需要为工作负载(Pod)指定容器镜像。容器镜像通常存储在镜像仓库中。你可以使用公共仓库(如 Docker Hub)或私有仓库。

公共镜像仓库

如果你希望使用公共镜像(如官方的 Nginx Ingress Controller 镜像),可以直接使用 Docker Hub 或其他公共镜像源。

代码语言:javascript
复制
image: nginx-ingress-controller:v1.6.4  # 使用 Docker Hub 上的公共镜像
私有镜像仓库

如果你使用腾讯云的容器镜像服务(如 ccr.ccs.tencentyun.com),你需要提供一个访问凭证来拉取镜像。在 Kubernetes 中,可以通过 imagePullSecrets 字段指定凭证。

代码语言:javascript
复制
image: ccr.ccs.tencentyun.com/tkeimages/nginx-ingress-controller:v1.6.4  # 指定腾讯云的私有镜像
imagePullSecrets:
  - name: qcloudregistrykey  # 配置访问腾讯云镜像仓库的凭证
5. 火山云与默认镜像选择

如果你使用火山云的容器服务,也可以将镜像仓库地址指向火山云的镜像仓库。与腾讯云的容器镜像服务类似,火山云提供私有镜像仓库服务,你可以上传自己的镜像并进行拉取。

代码语言:javascript
复制
image: <your-volcano-cloud-repository>/<your-nginx-ingress-image>:<tag>  # 使用火山云的镜像仓库

如果不想使用私有镜像仓库,也可以直接选择 Docker Hub 上的公共镜像。

代码语言:javascript
复制
image: nginx-ingress-controller:latest  # 使用官方 Docker Hub 镜像
6. Node Affinity 和资源调度

在 Kubernetes 中,Pod 的调度是由调度器根据一系列规则进行的。例如,如果 Pod 有 Node Affinity(节点亲和性),调度器会确保该 Pod 只调度到符合条件的节点上。如果没有符合条件的节点,Pod 就会被拒绝调度。

遇到类似 0/3 nodes are available: 3 node(s) didn't match Pod's node affinity/selector 错误时,说明当前集群没有符合该 Pod 亲和性或选择器条件的节点。你可以检查节点配置,或者调整 Pod 的 nodeAffinity 规则,使其更符合集群中的节点。

7. 总结

本文介绍了如何在 Kubernetes 中配置 Ingress 资源,如何使用外部负载均衡器(如腾讯云 CLB)以及如何选择容器镜像仓库。你可以根据实际需求选择公共镜像、腾讯云的容器镜像或火山云的镜像仓库。此外,通过配置 imagePullSecrets,你可以安全地从私有镜像仓库拉取镜像。

正确配置 Ingress、负载均衡器和镜像是确保 Kubernetes 集群中服务能够稳定、可靠地对外提供访问的关键。通过灵活的配置,Kubernetes 提供了强大的功能支持,能够满足不同场景下的需求。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何配置 Kubernetes Ingress 以支持外部负载均衡器和自定义镜像
  • 1. Kubernetes Ingress 资源概述
    • Ingress 的工作原理
  • 2. 创建和配置 Ingress 资源
    • 配置示例
    • 主要参数解释
  • 3. 配置外部负载均衡器
  • 4. 配置容器镜像和仓库
    • 公共镜像仓库
    • 私有镜像仓库
  • 5. 火山云与默认镜像选择
  • 6. Node Affinity 和资源调度
  • 7. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档