一 通过NodePort来暴露服务
前面已经介绍的服务的一些作用,例如将集群内部的应用暴露给集群内部的pod使用,将外部的应用通过服务暴露给内部应用使用,但是服务最大的作用不仅仅是这些
而是将集群内部的应用暴露给外部客户端进行访问,这种实现方式有多种,列举出其中2种进行介绍
- 第一种是:通过创建NodePort类型的服务提供给外部的访问
- 第二种是:创建Ingress来对集群内部的pod对外进行暴露
二 定义NodePort类型的服务资源
apiVersion: v1 kind: Service metadata: name: kubia-nodeport spec: type: NodePort ports: - port: 80 targetPort: 8080 nodePort: 30123 selector: app: kubia
- 内容很简单,只是比普通的service多了个type类型字段,并且在ports里面添加nodePoer和需要访问的目标端口
三 验证是否符合预期
如果除了之前的能通过集群分配给服务的固定IP和端口进行访问,还能通过集群里面的任意的节点加:30123的端口进行访问则说明可以通过
此种方式对服务进行暴露
[root@node01 Chapter05]# k get po NAME READY STATUS RESTARTS AGE kubia-7q8c5 1/1 Running 0 81m kubia-7w5tq 1/1 Running 0 81m kubia-ch6qk 1/1 Running 0 81m
[root@node01 Chapter05]# k get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d4h kubia-nodeport NodePort 10.101.58.249 <none> 80:30123/TCP 20m
[root@node01 Chapter05]# k exec kubia-7q8c5 -- curl -s http://10.101.58.249 You've hit kubia-7w5tq
[root@node01 Chapter05]# k get no -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master Ready master 3d4h v1.14.2 172.16.70.6 <none> CentOS Linux 7 (Core) 3.10.0-514.el7.x86_64 docker://18.9.6 node01 Ready <none> 3d4h v1.14.2 172.16.70.4 <none> CentOS Linux 7 (Core) 3.10.0-514.el7.x86_64 docker://18.9.6 node02 Ready <none> 3d4h v1.14.2 172.16.70.5 <none> CentOS Linux 7 (Core) 3.10.0-514.el7.x86_64 docker://18.9.6
[root@node01 Chapter05]# k exec kubia-7q8c5 -- curl -s http://172.16.70.6:30123 You've hit kubia-ch6qk
[root@node01 Chapter05]# k exec kubia-7q8c5 -- curl -s http://172.16.70.5:30123 You've hit kubia-ch6qk
[root@node01 Chapter05]# k exec kubia-7q8c5 -- curl -s http://172.16.70.4:30123 You've hit kubia-ch6qk
- 根据执行的结果以及代码可以看到,我们任意进入一个pod,无论是通过集群分配的IP或者是node:port都能够正确的访问到该服务后面挂载的pod
- 甚至可以尝试通过浏览器直接访问哦也是可以访问的