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,只有在与服务端口结合才有意义