摘要:本文我们通过一个最简单的例子来学习。注意看下图的栏下面显示的类型为的端口这个端口号是命令自动生成的,范围在到之间。如果需要修改,可以编辑的配置文件有了这个端口号,我们随便使用一个的地址,后面拼接上即是外部可以消费的完整地址。
很多Kubernetes的初学者对Kubernetes里面三种不同的IP地址和工作机制理解得不是很清楚。
本文我们通过一个最简单的例子来学习。
用如下命令行创建一个基于nginx的deployment:
kubectl run nginx --image=nginx:maxline
用kubectl get deploy查看成功生成的名为nginx的deployment:
此时这个deployment里的nginx pod还无法对外界提供服务。
我们创建一个service让外界能够消费。使用命令行创建这样的一个service:
kubectl expose deployment nginx --type=LoadBalancer --port=80 --target-port=80
type的类型选择为LoadBalancer, --port指定的是80端口,意思是这个service对外界暴露出来的服务端口是80,--target-port=80,这个端口是pod内部的nginx docker容器提供服务的工作端口,默认为80。这里实际上建立了向外界开发的80端口同nginx容器内部端口的一个映射关系。
执行完毕后,我们调用下面的命令行,看到了创建的service的Cluster IP和External IP。
其中external IP很好理解,这个service通过external IP加上我们前面介绍的被映射到80端口向外界提供服务:
浏览器里输入External IP http://35.241.173.27:80, 能成功访问nginx服务器的index.html:
而我们通过Service的Cluster IP是无法访问这个Service提供的功能的。
我们知道Kubernetes里的所有pod都可以彼此通信,而不需要通过网络地址转换(Network Address Translation-NAT),所有的节点也可以与所有的pod通信。而Service的Cluster IP,是一个内部的IP地址,专门用于同Cluster内部的节点或者pod通信。同外界通信,还是通过External IP进行。
NodePort再试试NodePort。
kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80
注意看下图的PORT栏下面显示的类型为NodePort的端口:31375
这个端口号是Kubernetes expose命令自动生成的,范围在30000到32767之间。如果需要修改,可以编辑api server的配置文件:/etc/kubernetes/apiserver:
有了这个端口号,我们随便使用一个node的IP地址,后面拼接上:31375即是外部可以消费的完整地址。
使用命令行kubectl get nodes -o wide, 在结果里选择任意节点的External-IP,后面加上:31375:
测试:
http://146.148.23.183:31375/
测试通过。
Pod的端口转发功能值得一提的是,有时我们出于测试的目的,需要一种简单的办法查看一个pod是否能正常提供服务。如果每次通过kubectl的方式创建service就太麻烦了。
这里介绍一种简单的办法:pod的端口转发功能(port forward)。
比如我们想测试下图get pods返回的第一个pod的功能,名称为nginx-6f754dd4b9-74jdn:
执行命令行 kubectl port-forward pod/nginx-6f754dd4b9-74jdn 8080:80
看到提示信息Forwarding from 127.0.0.1:8080 -> 80, 意思是把当前主机的8080端口映射到nginx pod的80工作端口:
最后,就能够通过localhost:8080直接访问nginx pod提供的服务了:
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/33097.html
摘要:本文我们通过一个最简单的例子来学习。注意看下图的栏下面显示的类型为的端口这个端口号是命令自动生成的,范围在到之间。如果需要修改,可以编辑的配置文件有了这个端口号,我们随便使用一个的地址,后面拼接上即是外部可以消费的完整地址。 很多Kubernetes的初学者对Kubernetes里面三种不同的IP地址和工作机制理解得不是很清楚。 本文我们通过一个最简单的例子来学习。 用如下命令行创建一...
摘要:本文我们通过一个最简单的例子来学习。注意看下图的栏下面显示的类型为的端口这个端口号是命令自动生成的,范围在到之间。如果需要修改,可以编辑的配置文件有了这个端口号,我们随便使用一个的地址,后面拼接上即是外部可以消费的完整地址。 很多Kubernetes的初学者对Kubernetes里面三种不同的IP地址和工作机制理解得不是很清楚。 本文我们通过一个最简单的例子来学习。 用如下命令行创建一...
摘要:后端代理之前的文章部署最后的测试部分,创建了一组及服务来验证业务,继续以这个例子来说明集群中已经有如下一组都带有标签,对外暴露端口,访问路径会返回主机名。请求代理转发是一个虚拟的地址,并不是某张网卡的真实地址。 为什么需要service Kubernetes可以方便的为容器应用提供了一个持续运行且方便扩展的环境,但是,应用最终是要被用户或其他应用访问、调用的。要访问应用pod,就会有以...
摘要:在这种情况下,以防干扰其他集群租户,调度器可能会考虑将作为驱逐的候选对象。其结果是负载均衡和调度之间交互作用。 每当谈及Kubernetes,我们经常听到诸如资源管理、调度和负载均衡等术语。虽然Kubernetes提供了许多功能,但更关键的还是要了解这些概念,只有这样才能更好地理解如何放置、管理并恢复工作负载。在这篇文章中,我提供了每个功能的概述,并解释了它们是如何在Kubernete...
阅读 1244·2021-09-04 16:41
阅读 2403·2021-09-02 10:18
阅读 915·2019-08-29 16:40
阅读 2612·2019-08-29 16:14
阅读 896·2019-08-26 13:41
阅读 1297·2019-08-26 12:24
阅读 729·2019-08-26 10:24
阅读 2867·2019-08-23 17:54