一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天,点击查看活动详情。
一、由云服务商提供负载均衡器
通常而言 Kubernetes
集群都是部署在云上的,比如:谷歌云、阿里云等等,这些云服务商一般都可以自动提供负载均衡器。
- 创建
tomcat-svc-loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
name: tomcat-loadbalancer
spec:
type: LoadBalancer # 注意:这里 type 设置为 LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: tomcat
- 执行创建
$ kubectl create -f tomcat-svc-loadbalancer.yaml
service/tomcat-loadbalancer created
# PORT(S) 这里,80 为集群内部服务的端口,30544 为 nodePort 端口(由集群随机选择)
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 86d
tomcat-loadbalancer LoadBalancer 10.109.126.5 <pending> 80:30544/TCP 8s
创建服务以后,云服务商需要一段时间才能创建负载均衡器并将其 IP
地址写入服务对象。如果成功创建阿里云的负载均衡器,比如获取服务信息的时候显示 EXTERNAL-IP
为 101.37.XX.XX
,可以在通过本地浏览器直接访问 http://101.37.XX.XX
使用 LoadBalancer Service
的优点和缺点都来源于云服务商的负载均衡器,优点是使用负载均衡器以后可以只对外暴露公有云的 IP
地址即可;
缺点是这样会有一定的成本,适合公司或是组织使用。
二、ExternalName Service
简介
ExternalName Service
是一种特殊类型的Service
,主要用于访问位于集群外部的服务。它没有选择器Selector
,也没有定义任何端口Port
或是Endpoints
。 它的作用是返回集群外服务的域名。
通过返回 CNAME
和它的值,可以将服务映射到 externalName
字段对应的内容。使用这种类型的服务不会创建任何类型的代理。
(1)举个栗子
- 创建
externalname-svc.yaml
文件
apiVersion: v1
kind: Service
metadata:
name: en-svc
namespace: default
spec:
type: ExternalName # type 类型需要选择 ExternalName
externalName: www.shiyanlou.com # externalName 中填写外部服务对应的域名
- 执行创建
$ kubectl create -f externalname-svc.yaml
service/en-svc created
# 查看服务,可以看到 en-svc 服务没有集群 IP,只有一个 EXTERNAL-IP,为:www.shiyanlou.com
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
en-svc ExternalName <none> www.shiyanlou.com <none> 6s
- 通过
ping
查看对应的ip
$ ping www.shiyanlou.com
PING www.shiyanlou.com (121.40.227.60) 56(84) bytes of data.
64 bytes from 121.40.227.60: icmp_seq=1 ttl=100 time=3.82 ms
64 bytes from 121.40.227.60: icmp_seq=2 ttl=100 time=3.77 ms
64 bytes from 121.40.227.60: icmp_seq=3 ttl=100 time=3.78 ms
- 进入容器内部通过
DNS
查找en-svc
服务对应的ip
这里单独运行一个使用
utils
镜像创建的pod
执行命令(镜像中已经安装了dnsutils
)
$ kubectl run --generator=run-pod/v1 --rm utils -it --image registry-vpc.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/utils:latest bash
If you don't see a command prompt, try pressing enter.
root@utils:/# nslookup en-svc
Server: 10.96.0.10
Address: 10.96.0.10#53
en-svc.default.svc.cluster.local canonical name = www.shiyanlou.com.
Name: www.shiyanlou.com
Address: 121.40.227.60
root@utils:/#