在上一篇文章我们介绍了kubernetes的service,这篇文章我们介绍下如何创建service。
在前面介绍过service的特点,有一条是这么说的:Service 通过 label selector 选定一组 Pod。这句话非常重要,大家一定要记得。接下来我们就需要理解这句话去创建一个人service。
举个例子:
现在我们有创建一个工作负载nacos,然后副本是3个。需求是需要对外统一提供这个nacos的访问。此时我们怎么办呢?
分析下:
1、nacos副本是3个,那么pod就应该是3个。
2、每个nacos对外提供的都是8848端口。
3、需要创建一个service,对各个pod的8848端口进行转发。
好了理解了上面的需求,那么我们就来操作一下。
一、创建一个nacos工作负载,授予他的label是:k8s.kuboard.cn/name=nacos
二、填写nacos的容器信息进行创建。
这里就省略掉,之前的文章已经演示过了,但是备注下,这里由于演示机器只有1个,所以我的副本只能是1,所以我修改下1。同时我们把宿主机端口给屏蔽掉。
以上步骤我们完整的运行了一个nacos实例。此时我们知道这个pod是不能被访问的。那么我们需要如何让他可以被访问呢,那就接着往下。
三、我们创建一个人service
点击保存,然后我们就可以看到service被创建了。
此时我们看到一个一个问题,上面提供的ip他不是我们这台演示服务器的外网ip,也不是演示服务器的内网ip,那出现一个10.234.168.9的ip。这个ip是什么呢?
先看下我的演示服务器ip
其实这个10.234.168.9的ip是kubernetes内部的dns分配的ip,如果需要访问这个服务的话,我们可以在kubernetes的其他pod节点,使用10.234.168.9访问这个nacos的服务。下面给大家演示下。
还记得在这个集群里面我们还有一个nginx的pod吗? 我们进去下,和docker进入容器一样,只是把docker命令换成了kubectl命令
kubectl exec -it nginx-58d48c6bc6-9p64j -- bash
但是有个问题,我们的nginx里面没有curl或者telnet命令,所以我们来个ping吧。
从上面可以看出能ping通,所以说在kubernetes内部,我们如果有客户端需要调用这个service,只需要把客户端部署到这个kubernetes集群里面就可以直接访问这个service了。
最后我们看下刚才创建的service的yml文件。
--- apiVersion: v1 kind: Service metadata: annotations: {} name: nacos-server namespace: kuboard resourceVersion: '128347' spec: clusterIP: 10.233.139.29 clusterIPs: - 10.233.139.29 externalTrafficPolicy: Cluster internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: jdfpnp nodePort: 30568 port: 18848 protocol: TCP targetPort: 8848 selector: k8s.kuboard.cn/name: nacos sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800 type: NodePort
可以很直白的看到这个service的所有信息
还没有评论,来说两句吧...