k8s是一个全新的编排方式,但是它的通信方式也是比较复杂的,而且种类也比较的多。
最常见的是就比如我们通过service
查看到的,
接下来我们会创建不同的访问方式,给大家演示效果
hostNetwork、hostPort、NodePort、LoadBalancer、Ingress、clusterip
一共包括6中通信方式,其中clusterip是不对外开放的,只是集群内部使用
yaml文件我已经放到了百度网盘
解压可以使用
链接:https://pan.baidu.com/s/1YNnNZamlW325x5spVjw4Ig
提取码:wbtg
然后倒入镜像
docker load < gcr.io#google_containers#defaultbackend.tar
docker tag 452a96d81c30 gcr.io/google_containers/defaultbackend
然后解压tar包,里面就是yaml问题件
1、首先我们介绍下hostNetwork这种访问方式:
kubectl create -f nginx.yaml
去node1上面查看一下
访问测试一下
这里只能node1可以访问,其他node节点访问是不行的
修改一下副本数量验证一下
kubectl edit deployment nginx
2、接下来介绍hostPort zhezhong这种模式
kubectl create -f nginx-hostport.yaml
3、接下来创建NodePort
这种也比较简单
创建2个yaml
kubectl create deployment nginx --image=nginx --dry-run -o yaml > nginx.yaml
kubectl expose deployment nginx --port=8080 --target-port=80 --type=NodePort --dry-run -o yaml > svc.yaml
启动一下
访问一下
这种方式,所有的nodeip+端口都可以访问
4、接下来我们介绍比较特殊的一种访问方式LoadBalancer
先简答的介绍一下
metallb简介
官方网站:https://metallb.universe.tf/
MetalLB是使用标准路由协议的裸机Kubernetes集群的软负载均衡器
【备注】私有云裸金属架构的kubernetes集群不支持LoadBalance
如果你的kubernetes集群没有在公有云的IaaS平台(GCP,AWS,Azure …)上运行,则LoadBalancers将在创建时无限期地保持“挂起”状态,也就是说只有公有云厂商自家的kubernetes支持LoadBalancer。
MetalLB旨在解决这种不平衡
MetalLB旨在通过提供与标准网络设备集成的网络LB实现来纠正这种不平衡,以便裸机集群上的外部服务也“尽可能”地工作。即MetalLB能够帮助你在kubernetes中创建LoadBalancer类型的kubernetes服务
接下来我们部署一下:
wget https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/metallb.yaml
wget https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/example-layer2-config.yaml
创建一下
修改ip地址池和集群节点网段相同
注意:【这里的 IP 地址范围需要跟集群实际情况相对应】
创建后端应用和服务测试
接下来测试一下
我的机器应为是腾讯云机器自己创建的所以这个ip不能直接那到外网使用,只能通过公网访问,刚才curl其实已经验证了。
5、上面介绍了LoadBalancer接下来介绍另外的一种比较流行的方式
Ingress,这种是当前比较流行的方式
简单介绍一下
一个负载均衡的玩意,其主要用来解决使用NodePort暴露Service的端口时Node IP会漂移的问题。同时,若大量使用NodePort暴露主机端口,管理会非常混乱
Ingress就可以解决上面的问题,其包含两个组件Ingress Controller和Ingress:
Ingress
将Nginx的配置抽象成一个Ingress对象,每添加一个新的服务只需写一个新的Ingress的yaml文件即可
Ingress Controller
将新加入的Ingress转化成Nginx的配置文件并使之生效
开始创建一下
接下来创建ingress
这里需要注意,ingress如何和pod关联,是通过svc上面的地址和端口关联的哈
接下来还要配置一个错误的网页
default-backend的作用是,如果外界访问的域名不存在的话,则默认转发到default-http-backend这个Service,其会直接返回404
6、接下来开始最后一种模式ClusterIP
这种模式主要是整个k8s集群内部使用,不对外开放的,比如我们启动一个nginx想要对外访问需要nodeport这类的的转发,但是没有转发的时候是无法访问的,只能在集群内部使用
----================================================
好了今天这6中方式就介绍到这里,后续有问题,欢迎大家私信联系