kubernetes_04_service_01_20190921

概念:

Kubernetes service定义了这样一种抽象:一个Pod的逻辑分组,一种可以访问它们的策略--通常称为一个微服务。这一组Pod能够被Service访问到,通常是通过 Label Selector

Service能够提供负载均衡的能力,但有以下限制:

只提供4层负载均衡能力(ip+port),而没有7层功能(主机名,域名)。在需要更多的匹配规则来转发请求的场合,4层负载均衡是不支持的。

Service类型:

1)ClusterIP:默认类型,自动分配一个仅Cluster内部可以访问的  虚拟IP+port

2)NodePort:在ClusterIP基础上为Service在每台机器上绑定一个端口,这样可以通过 NodeIP:NodePort来访问该服务

3)LoadBalancer:在NodePort的基础上,借助cloud provider(外部云服务商)创建一个外部负载均衡器,并将请求转发到NodeIP:NodePort 

4)ExternalName:把集群外部的服务(如Amoeba集群)引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,k8s 1.7+以上的版本kube-dns才支持

1.ClusterIP

示例: Example011:

/root/yaml/001_pod_rs_deployment_svc/011_00_myapp-deployment.yaml

/root/yaml/001_pod_rs_deployment_svc/011_01_myapp-svc.yaml

Headless Service(无头服务)

.spec.clusterIP:None

这类service 不会分配单独的Cluster IP,kube-proxy不处理它们,平台不会为它们进行负载均衡和路由。集群内的pod通过无头服务的名称来访问该服务

Headless Service示例: Example012:

/root/yaml/001_pod_rs_deployment_svc/012_myapp-svc-headless.yaml

# dig -t A myapp-headless.default.svc.cluster.local. @10.244.0.12        //croedns-ip //kubectl get pod -n kube-system -o wide

2.NodePort

NodePort的原理是:在node上开了一个端口,将向该端口的流量导入到kube-proxy,然后由kube-proxy进一步到对应的pod

示例: Example013:

/root/yaml/001_pod_rs_deployment_svc/013_nodeport-svc.yaml

浏览器http访问

3.ExternalName

ExternalName 对 运行在集群外部的服务取一个别名(CNAME),集群内的pod通过使用别名SVC_NAME.NAMESPACE来使用该外部服务(别名对应的值)。

主要用来集中管理外部服务,管理集群与外部服务的耦合。

示例: Example014:

/root/yaml/001_pod_rs_deployment_svc/014_ExternalName.yaml

SVC_NAME.NAMESPACE.svc.cluster.local

# dig -t A mysql-externalname.default.svc.cluster.local. @10.244.0.12

;; ANSWER SECTION:

mysql-externalname.default.svc.cluster.local. 5 IN CNAME www.baidu.com.

www.baidu.com. 5 IN CNAME www.a.shifen.com.

www.a.shifen.com. 5 IN A 183.232.231.174

www.a.shifen.com. 5 IN A 183.232.231.172

测试:其他pod内 curl mysql-externalname.default

作业:通过ExternalName 实现mysql 3306或者Amoeba集群的服务访问

发布了16 篇原创文章 · 获赞 0 · 访问量 69

猜你喜欢

转载自blog.csdn.net/wuyuezhengbian/article/details/105007207
今日推荐