在Kubernetes中,Pod虽然拥有独立的IP,但会被快速地创建和删除,因此无法直接对外提供服务。而服务(Service)能够解耦前端和后端的关联,从而实现松耦合的微服务设计。本文介绍如何通过控制台创建虚拟集群IP服务。
前提条件
已创建ACS集群。
背景信息
Kubernetes Service定义了这样一种抽象:一个Pod的逻辑分组,一种可以访问它们的策略,通常称为微服务。这一组Pod能够被Service访问到,通常是通过Label Selector来实现。
在Kubernetes中,Pod虽然拥有独立的IP,但Pod会快速地创建和删除,因此通过Pod直接对外界提供服务不符合高可用的设计准则。通过Service,Service能够解耦frontend(前端)和backend(后端)的关联,frontend不用关心backend的具体实现,从而实现松耦合的微服务设计。
更多详细的原理,请参见Kubernetes service。
步骤一:创建Deployment
登录容器计算服务管理控制台,在左侧导航栏选择集群。
在集群页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面右上角,单击使用YAML创建资源。
选择示例模板或自定义,然后单击创建。
本示例模板是一个Nginx的Deployment。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 # 请替换为您实际的镜像,格式为<image_name:tags>。 ports: - containerPort: 80 # 需要在服务中暴露该端口。
在无状态页面,单击目标应用名称或右侧的详情,查看该Deployment的运行状态,等待其所有Pod实例可用。
步骤二:创建服务
登录容器计算服务管理控制台,在左侧导航栏选择集群。
在集群页面,单击目标集群名称,然后在左侧导航栏,选择
。在服务页面右侧,单击创建,在创建服务对话框中,配置相关信息,然后单击确认。
配置项
说明
服务名称
设置服务的名称。
类型
选择虚拟集群IP,即ClusterIP,通过集群的内部IP暴露服务。选择该值后,服务只能在集群内部访问,此类型为默认的Service类型。
说明您可以按需选择是否开启实例间服务发现(Headless Service)。开启后,您可以使用无头Service与其他服务发现机制进行接口,无需与Kubernetes的实现捆绑。
服务关联
选择服务要绑定的后端应用。若不进行关联部署,则不会创建相关的Endpoints对象。关于服务关联的详细介绍,请参见services-without-selectors。
端口映射
添加服务端口(对应Service YAML文件中的
port
)和容器端口(对应Service YAML文件中的targetPort
),容器端口需要与后端的Pod中暴露的容器端口一致。注解
为该服务添加一个注解(Annotation)。
标签
为该服务添加一个标签,标识该服务。
创建完成后,您可以在服务页面的操作列,对目标服务进行更新、YAML 编辑或删除操作。
说明您可以单击服务名称进入服务详情页面,单击外部端点后面的链接访问应用。