Kubernetes-服务连接和暴露(endpoints)(二十)
1 endpoint
1.1 endpoint介绍
服务和pod不是直接连接,而是通过Endpoint资源进行连通。endpoint资源是暴露一个服务的ip地址和port的列表。
选择器用于构建ip和port列表,然后存储在endpoint资源中。当客户端连接到服务时,服务代理选择这些列表中的ip和port对中的一个,并将传入连接重定向到在该位置监听的服务器。
endpoint是一个单独的资源并不是服务的属性,endpoint的名称必须和服务的名称相匹配。
1.2 endpoint使用
1.2.1 创建
为没有选择器的服务创建endpoint资源:
$ kubectl create -f endpoint.yml
endpoint对象需要与服务相同的名称,并包含该服务的目标ip和port列表,服务和endpoint资源都发布到服务器后,这样服务就可以像具有pod选择器那样的服务正常使用。
by k8s in action
1.2.2 查看
查看服务的Endpoint
$ kubectl describe svc service_name
通过kubectl describe
可以看到Endpoints字段。
查看endpoints信息
$ kubectl get endpoints endpoint_name
by k8s in action
1.3 连接集群外部服务
1.3.1 通过endpoint配置外部服务
将pod关联到外部具有两个endpoint的服务上。
by k8s in action
1.3.2 创建ExternalName类型的服务
除了手动配置服务的endpoint来代替公开外部服务方法,还可以通过完全限定域名(FQDN)访问外部服务——创建ExternalName类型的服务。
by k8s in action
ExternalName类型的服务创建后,pod可以通过external-service.default.svc.cluster.local域名连接到外部服务,或者通过externale-service。当需要指向其他外部服务时,只需要修改spec.externalName
的值即可。
2 外部访问服务
2.1 介绍
问题:外部客户端如何访问集群内服务或者说集群如何向外部公开某些服务呢?
答案:3种方式:
1)将服务的类型设置为NodePort:每个集群接节点都会在节点上打开一个端口,对于NodePort服务,每个集群节点在节点本身打开一个端口,这也是为何叫NodePort的原因所在,把将在该端口上接收到的流量重定向到基础服务。该服务仅在内部集群ip和port上才可以方阿文,也可以通过所有节点上的专用port访问。
2)将服务的类型设置为LoadBalance:这是NodePort的一种扩展,服务可以通过一个专用的负载均衡器来访问。负载均衡器将流量重定向到跨所有节点的节点端口,客户端通过负载均衡器的ip连接到服务。
3)创建一个Ingress资源:通过一个ip地址公开多个服务,运行在HTTP层(网络协议的第7层),提供的功能比第4层多。
参考《k8s in action》