Service:让客户端发现pod并与之通信
创建服务,利用单个地址访问一组pod
服务是虚拟的网络管理,不涉及实实在在的pod,所以确保已经创建好了pod,可以使用前面的yaml创建,如
$ k create -f kubia-replicaset.yaml 130 ↵
replicaset.apps/kubia createdk create -f -<<EOF
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: kubia
spec:
replicas: 3
selector:
matchLabels:
app: kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia
EOF服务也有yaml描述文件
同样,大家不要刻意记忆,理解就好,后面用到可以到这里copy/paste。创建它
使用clusterip访问
上面有个服务CLUSTER-IP(172.22.2.238),要换成你自己的,找到它访问一下,可以这样
使用集群内域名机制访问
每个服务都有唯一的域名,如这个服务对应的域名是
kubia.<liuzongxian换成你的命名空间>.svc.cluster.local
这个域名在集群内部都是可以直接使用的,如:
无法ping通服务ip的原因
我们都习惯ping服务,但实际上集群内部的服务概念是虚拟的,需要结合端口才有意义。
将服务公开给外部客户端
上面的方式其实叫做ClusterIP方式,仅能内部访问,那怎样外部客户端访问呢?
使用NodePort方式
为每个节点开一个独一无二的端口供这个服务占用,客户端使用节点ip+端口方式访问,请创建下面这个服务
查看一下
由于阿里云开的资源默认没有分配公网ip,需要使用内网测试,内网ip可以从节点的名字中找到,如下图的 10.32.100.48
这里稍稍复杂一些,我们启动了一个busybox的pod来测试内网端口
效果如图

使用负载均衡器
最简单但是要换钱的方式 😅
create它,然后看看,然后请找到自己的External IP,就是外网负载均衡器了。
通过Ingress反向代理
这里ingress名字比较诡异,但其实就是nginx服务帮你转发。
ingress方式非常常用
创建效果如下
从上面的Address代表了nginx外网ip,配置到/etc/hosts下,我们就可以用浏览器输入域名访问了,对必须输入域名。 😛
这里有个扩展,就是配置nginx的443安全访问,我们不在课程中讲解了
清理资源
到现在创建了不少资源了,清空一下自己空间的资源吧。
$ k delete all --all 这个指令一定要在自己空间内使用
就绪探针Readiness Probe
pod成功用的是健康探测,但是服务还不一定准备好,没有准备好服务的pod不应该对外提供服务,所以要加readiness检测。
上面描述指明,只要/var/ready不存在,就还不能对外提供服务
能看到全都没有提供服务,没有进入READY状态,我们进入一个pod满足它,然后再看状态
已经ready了,此时service才能让它对外提供服务
好的,至此你完成非常难的一个小节了,应该给自己鼓鼓掌!本章节也是日常经常用到的内容。
思考题
请说说就绪探针、健康探针
最后更新于
这有帮助吗?