1、介绍endpoint
服务并不是和pod直接相连,有一种资源介于两者之间—endpoint资源
Endpoint资源就是暴露一个服务的ip地址和端口的列表,Endpoint资源和其他kubernets资源一样,使用kubectl info来获取它的基本信息
kubectl get endpoints kubia
2、手动配置服务endpoint
如果创建了不包含pod选择器的服务,kubernetes将不会创建endpoint资源,这样就需要创建Endpoint资源来指定该服务的endpoint列表
要使用手动配置endpoint的方式创建服务,需要创建服务和endpoint资源
1)创建没有选择器的服务
为服务创建一个yaml文件:
apiVersion:v1
kind:Service
metadata:
name:external-service
spec:
ports:
-port:80
注意:服务的名字必须和Endpoint对象的名字相匹配
2)为没有选择器的服务创建Endpoint资源
endpoint上一个单独的资源并不是服务的一种属性。由于创建的资源中并不创建选择器,相关的endpoint资源并没有自动创建,所以必须手动创建,
apiVersion:v1
kind:Endpoints
metadata:
name:external-service
subsets:
-addresses:
-ip:11.11.11.11
-ip:22.22.22.22
ports:
-port:80
注意:endpoint对下需要与服务具有相同的名字,并包含该服务的目标ip地址和端口列表。
3、为外部服务创建别名
除了手动配置服务的endpoint来代替公开外部服务方法,有一种更简单的方法,就是通过气完全限定域名(FQDN)来访问你外部服务
1)创建ExternalName类型的服务
要创建一个具有别名的外部服务的服务时,要将创建服务资源的一个type字段设置为ExternalName
apiVersion:v1
kind:Service
metadata:
name:external-service
spec:
type:ExternalName
externalName:someapi.somecompany.com
ports:
-port:80
服务创建完后,pod可以通过external-service.default.svc.cluster.local域名(甚至是external-service)连接到外部服务,而不是使用服务的实际FQDN。这隐藏了实际的服务名称及其使用该服务的pod位置,允许修改服务定义,并且在以后如果将其指向不同的服务,只需简单的修改externalName属性,或者将类型重新碧昂辉ClusterIP并为服务创建endpoint,无论是手动创建,还是对服务上指定标签选择器使其自动创建。
externalName服务仅在dns级别实施,为服务创建了简单的cname dns记录
注意:cname记录指向完全限定的域名而不是数字ip地址