k8s-svc外界访问pod容器服务-4
k8s-svc常用群名-41.service概述1.1.service解决了什么问题运行在docker中的业务,想要被外界访问,我们需要为它做端口映射才能被访问,那么运行在k8s中的容器,为什么不能直接为它做端口映射呢?解答k8s中的容器,为什么不能直接为它做端口映射在node节点上启动一个A容器,这个A容器配置好了端口映射,但是这个A容器挂了,重新起了一个B容器,这个B容器的IP地址与A容器并不
k8s-svc外界访问pod容器服务-4
1.service概述
1.1.service解决了什么问题
运行在docker中的业务,想要被外界访问,我们需要为它做端口映射才能被访问,那么运行在k8s中的容器,为什么不能直接为它做端口映射呢?
- 解答k8s中的容器,为什么不能直接为它做端口映射
在node节点上启动一个A容器,这个A容器配置好了端口映射,但是这个A容器挂了,重新起了一个B容器,这个B容器的IP地址与A容器并不一样,这样我们就没法为每个pod容器都配置端口映射。也就是为什么不能为k8s容器做端口映射访问。
1.2.service解决容器不能被外界访问原理
k8s中有三种IP地址类型:
- node IP:这个ip就是每个node节点上的ip地址。
- cluster IP:service ip地址。
- pod IP:每个pod容器内部的IP地址,这个地址只能在pod内部使用,在外部是不能被访问的。
service 创建一个clusterIP,集群中的node节点的地址都在在cluster上注册,当node节点上的pod容器启动后就会在cluster上注册自己的IP地址,外界访问node节点地址就会自动映射到对应的pod容器上,实现外界访问pod容器。
2.创建一个service
2.1.创建svc
# 创建一个目录存放svc文件
mkdir svc
cd svc
# 创建svc文件
vim nginx-svc.yaml
# 创建svc
kubectl create -f nginx-svc.yaml
apiVersion: v1
kind: Service # 资源类型为Service
metadata:
name: myweb #service名称
spec:
type: NodePort # service类型是nodePort端口映射
ports:
- port: 80 # 访问cluster的端口
nodePort: 30000 #访问宿主机node节点的端口
targetPort: 80 # 访问pod容器的端口
selector:
app: myweb # 通过标签绑定pod,只要是myweb标签的pod都由他管理。
2.2.查看svc详细信息
kubectl describe svc myweb
Endpoints: 后面的地址就是pod容器的IP地址,现在有两个pod已经注册到svc上。
2.3.访问pod容器
输入任何node节点的IP地址加端口号就可以访问pod容器内提供的服务。
3.service服务自动发现
service的服务自动发现不需要手动添加pod,他会自动检测新创建的pod,然后在cluster中注册新pod的IP地址。
- rc中增加一个pod副本
kubectl scale rc myweb --replicas=3
- 查看svc自动添加pod
4.service 负载均衡
service内部实现了负载均衡功能,当我们部署了多个副本的nginx服务后,在访问的时候将请求均衡到每个副本的nginx上处理。service是一个长连接,当我们连续访问的时候不会切换到另一个pod上,需要稍等一会再次访问就会切换到另一个pod上。
- 负载均衡访问多个nginx副本
echo 'nginx1' >index.html
kubectl cp index.html myweb-1kwx1:/usr/share/nginx/html/index.html
echo 'nginx2' >index.html
kubectl cp index.html myweb-dfkn9:/usr/share/nginx/html/index.html
- 多次访问nginx
5.svc扩展知识
上面在创建svc配置文件中,nodePort: 30000 #访问宿主机node节点的端口 改参数配置的端口默认是30000,这个端口的范围是可以修改的。
-修改默认端口范围
#修改apiservver文件
vim /etc/kubernetes/apiserver
#添加端口访问范围
KUBE_API_ARGS="--service-node-port-range=10000-60000"
#重启apiserver
systemctl restart kube-apiserver.service
- 查看apiserver有哪些配置
cat /usr/lib/systemd/system/kube-apiserver.service
更多推荐
所有评论(0)