K8s集群部署Docker-Harbor镜像:Node认证详解

需积分: 5 2 下载量 75 浏览量 更新于2024-08-03 收藏 675KB DOCX 举报
"这篇文档主要介绍了如何在Kubernetes (k8s) 集群中部署基于Docker-Harbor的镜像,并在Node节点上进行必要的认证过程。" 在Kubernetes环境中部署应用通常涉及创建Deployment、Service以及Ingress资源。在本案例中,我们关注的是如何将存储在Docker-Harbor私有仓库的镜像部署到Kubernetes集群的Node节点,并确保在拉取镜像时正确进行身份验证。 首先,我们看到一个名为`deploy.yml`的YAML文件,它包含了三个主要的Kubernetes对象定义:Deployment、Service和Ingress。以下是这些对象的详细说明: 1. Deployment: - `apiVersion: apps/v1` 表明我们正在使用的是apps/v1版本的Deployment API。 - `kind: Deployment` 定义了一个Deployment资源,用于管理应用的副本集和滚动更新。 - `name: web` 是这个Deployment的名称。 - `spec.replicas: 2` 指定我们希望保持的副本数量,这里是2个。 - `spec.selector.matchLabels.app: java-demo` 确保Deployment选择器与Pod模板的标签匹配。 - `spec.template.spec.imagePullSecrets.name: $SECRET_NAME` 定义了用于从Docker-Harbor拉取镜像的Secret名称,需要替换为实际的Secret名称。 - `spec.containers` 部分定义了容器的配置,包括镜像名 `$IMAGE_NAME`,端口映射等。 2. Service: - `apiVersion: v1` 和 `kind: Service` 创建了一个v1版本的服务。 - `name: web` 是服务的名称。 - `spec.type: NodePort` 指定服务类型为NodePort,这样可以将服务暴露在每个集群节点的特定端口上。 - `spec.selector.app: java-demo` 与Deployment的selector匹配,确保服务能正确路由到对应的Pods。 - `spec.ports` 配置了服务端口和目标Pod端口的映射。 3. Ingress: - `apiVersion: extensions/v1beta1` 使用的是老版Ingress API,新版本应使用networking.k8s.io/v1。 - `kind: Ingress` 创建了一个Ingress资源,提供外部网络访问应用的规则。 - `name: web` 为Ingress的名称。 - `spec.rules` 定义了访问规则,通过`host: java.example.com` 指定了域名。 - `spec.rules.http.paths` 设置了HTTP路径,将流量导向Service。 在Kubernetes中,`imagePullSecrets` 是用来存储Docker注册表(如Harbor)凭证的Secret对象,这里需要在创建Deployment之前创建。你可以使用`kubectl create secret docker-registry`命令创建一个Secret,然后将`$SECRET_NAME`和`$IMAGE_NAME`替换为实际的Secret名称和镜像名称。 总结来说,这个过程包括: 1. 创建一个Docker-Harbor的镜像Pull Secret。 2. 编写YAML文件,其中包含Deployment、Service和Ingress的定义,以及使用该Secret的配置。 3. 使用`kubectl apply -f deploy.yml`命令部署YAML文件中的资源。 4. 验证服务是否正常运行,并通过Ingress规则从外部访问应用。 完成这些步骤后,你就可以在Kubernetes集群的Node节点上成功部署并运行存储在Docker-Harbor的镜像了。