写点什么

022 云原生之 Kubernetes 服务

发布于: 刚刚
022云原生之Kubernetes服务

Kubernetes 内部的部署只能在集群内部访问,若要暴露这些工作负载,Kubernetes 提供了工作在 ISO/OSI 模型的传输控制层的服务和工作在应用层的 Ingress 两种方式暴露后端工作负载


Kubernetes 服务(Service)定义了这样一种抽象:在逻辑上通过标签来选定一组 Pod,提供一种策略,让外网和前端客户能够访问这组 Pod


服务不仅可以指向集群内部的 Pod,也可以指向集群外部的资源。通过指向外部资源的服务,集群内部的 Pod 可以像访问内部资源一样方便地访问外部资源,尤其是外部资源后续需要迁移到集群内部的场景下更是如此。


在有些场景下业务不需要负载均衡,或者不需要单独的 Service IP,此时业务可以使用 Headless Service。在 Headless Service 中,.spec.clusterIP 需要设置为“None”。这也就决定了 Headless Service 只能在集群内部使用。


ClusterIP:通过集群的内部 IP 暴露服务。选择该值,服务只能在集群内部访问。


NodePort:通过在每个节点上创建相同的端口来暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 会自动创建,也可以手工指定。


LoadBalancer:使用云提供商的负载均衡设备向外暴露服务。例如 GoogleCloud、Oracle Cloud 等厂商都提供外部负载均衡设备,外部均衡设备路由到 ClusterIP 服务。Google 开源了一个 MetalLB 项目,用于裸机上的负载均衡服务。


ExternalName:通过返回 CNAME 和它的值,可以将服务映射到 externalName 字段指定的内容。


Service 是工作在四层上的服务,在 Kubernetes 中还有一个工作在七层上的 IngressAPI 对象。它主要将 HTTP 和 HTTPS 协议从外部路由到集群内部的 Service。Ingress 可以为内部服务提供外网 URL,也可以提供流量负载均衡功能、终止 SSL/TLS 功能以及基于名称的虚拟主机功能


发布于: 刚刚阅读数: 3
用户头像

InfoQ签约作者 2018.11.30 加入

还未添加个人简介

评论

发布
暂无评论
022云原生之Kubernetes服务