Kubernetes 中的 Ingress 是一个 API 资源,用于管理外部访问集群中服务的方式,通常用于 HTTP 和 HTTPS 路由。Ingress Controller 是实现 Ingress 资源的控制器,它的功能是根据 Ingress 的定义创建负载均衡规则,并处理进出 Kubernetes 集群的流量。本文将讨论如何配置 Kubernetes 中的 Ingress 资源、如何指定外部负载均衡器以及如何选择容器镜像源。
在 Kubernetes 集群中,Ingress 资源用于暴露 HTTP 和 HTTPS 路由流量到服务。Ingress 控制器(如 Nginx Ingress Controller)会根据 Ingress 资源中的规则将流量引导到指定的服务。Ingress 控制器本身也可以配置为使用外部负载均衡器,这样可以让流量更好地分发到集群的各个节点。
我们可以通过 YAML 文件配置 Ingress 资源。以下是一个基础的 Ingress 资源配置,它包含了一个外部负载均衡器、Nginx Ingress 控制器以及其他相关设置。
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 # 工作负载类型为 deploymentliantong-ingress 是一个自定义的 IngressClass,用于匹配和处理该资源。
service.kubernetes.io/tke-existed-lbid 字段指定了腾讯云负载均衡器的 ID。通过这种方式,Ingress 控制器会使用现有的 CLB(Cloud Load Balancer)进行流量分配。
LoadBalancer 类型的服务,Kubernetes 会创建一个外部负载均衡器来接收来自外部的请求,并将请求转发到相应的服务。
ccr.ccs.tencentyun.com/tkeimages/nginx-ingress-controller:v1.6.4。这使得 Kubernetes 在启动 Ingress 控制器时使用该镜像。
qcloudregistrykey 的 Secret,该 Secret 存储了访问腾讯云容器镜像仓库的凭证。
如果你使用腾讯云 TKE(腾讯云容器引擎)或其他支持外部负载均衡器的云服务,可以通过注释字段来配置已有的负载均衡器。上面的 YAML 配置中使用了 service.kubernetes.io/tke-existed-lbid 来指定已有的负载均衡器 ID。
腾讯云的 TKE 提供了 CLB(Cloud Load Balancer)来将流量路由到 Kubernetes 服务。你可以使用已有的 CLB,也可以通过 Kubernetes 自动创建一个新的负载均衡器。
在 Kubernetes 中,你需要为工作负载(Pod)指定容器镜像。容器镜像通常存储在镜像仓库中。你可以使用公共仓库(如 Docker Hub)或私有仓库。
如果你希望使用公共镜像(如官方的 Nginx Ingress Controller 镜像),可以直接使用 Docker Hub 或其他公共镜像源。
image: nginx-ingress-controller:v1.6.4 # 使用 Docker Hub 上的公共镜像如果你使用腾讯云的容器镜像服务(如 ccr.ccs.tencentyun.com),你需要提供一个访问凭证来拉取镜像。在 Kubernetes 中,可以通过 imagePullSecrets 字段指定凭证。
image: ccr.ccs.tencentyun.com/tkeimages/nginx-ingress-controller:v1.6.4 # 指定腾讯云的私有镜像
imagePullSecrets:
- name: qcloudregistrykey # 配置访问腾讯云镜像仓库的凭证如果你使用火山云的容器服务,也可以将镜像仓库地址指向火山云的镜像仓库。与腾讯云的容器镜像服务类似,火山云提供私有镜像仓库服务,你可以上传自己的镜像并进行拉取。
image: <your-volcano-cloud-repository>/<your-nginx-ingress-image>:<tag> # 使用火山云的镜像仓库如果不想使用私有镜像仓库,也可以直接选择 Docker Hub 上的公共镜像。
image: nginx-ingress-controller:latest # 使用官方 Docker Hub 镜像在 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 规则,使其更符合集群中的节点。
本文介绍了如何在 Kubernetes 中配置 Ingress 资源,如何使用外部负载均衡器(如腾讯云 CLB)以及如何选择容器镜像仓库。你可以根据实际需求选择公共镜像、腾讯云的容器镜像或火山云的镜像仓库。此外,通过配置 imagePullSecrets,你可以安全地从私有镜像仓库拉取镜像。
正确配置 Ingress、负载均衡器和镜像是确保 Kubernetes 集群中服务能够稳定、可靠地对外提供访问的关键。通过灵活的配置,Kubernetes 提供了强大的功能支持,能够满足不同场景下的需求。