K8s_02
K8s 服务的创建
为什么需要服务?
1.pod是短暂的,随时会启动或关闭
2.pod在启动时才分配地址,因此客户端不能提前知道服务的pod的ip地址
3.水平伸缩意味着多个pod提供相同服务,所有的pod都可以通过一个IP地址进行访问
实际测试
创建服务
apiVersion: v1
kind: Service
metadata:
name: kubia-nodeport
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: kubia
创建一个名叫kubia-nodeport的服务,他在端口80接收请求并连接路由到具有标签选择器是app=kubia的pod的8080端口上
kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(s) AGE
kubia 10.11.249.153 <none> 80/TCP 6m
分配的服务的IP的集群的IP,只能通过集群内部访问
从集群内部测试服务
kubectl exec kubia-7n0g1 -- curl -s http://10.11.249.153
服务发现
通过dns发现服务
集群中所有的pod都使用kube-dns或coredns 作为dns(k8s通过修改每个pod的 /etc/resolv.conf文件实现) tips:pod是否使用内部的DNS服务器是根据pod中spec的dnsPolicy属性决定的
通过FQDN连接服务
kubectl exec -it kubia-3inly bash
root@kubia-3inly:/# curl http://kubia.default.svc.cluster.local
服务IP无法ping通,因为服务的集群IP是虚拟IP,只有在与服务端口结合才有意义