service的三种端口portservice暴露在cluster ip上的端口,:port 是提供给集群内部客户访问service的入口 。
nodePortnodePort是k8s提供给集群外部客户访问service入口的一种方式,:nodePort 是提供给集群外部客户访问service的入口 。
targetPorttargetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器 。
port、nodePort总结总的来说,port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务 。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod上的容器内 。
查看service转发情况ipvadmservice NodePort 39719 和endpoint[root@mcwk8s03 ~]# kubectl get svc mcw-nginx-serviceNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEmcw-nginx-serviceNodePort10.2.0.252<none>80:39719/TCP9m21s[root@mcwk8s03 ~]# kubectlget pod -o wideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATESmcw-nginx-deployment-86466dbd78-fkrs71/1Running064m172.17.13.2mcwk8s05<none><none>mcw-nginx-deployment-86466dbd78-rnvsc1/1Running064m172.17.13.4mcwk8s05<none><none>mcw-nginx-deployment-86466dbd78-znjbm1/1Running064m172.17.21.3mcwk8s06<none><none>[root@mcwk8s03 ~]#[root@mcwk8s03 ~]# kubectl get endpoints mcw-nginx-serviceNAMEENDPOINTSAGEmcw-nginx-service172.17.13.2:80,172.17.13.4:80,172.17.21.3:8012m[root@mcwk8s03 ~]# node上查看nodeport[root@mcwk8s05 ~]# netstat -lntup|grep 39719tcp600 :::39719:::*LISTEN130848/kube-proxy[root@mcwk8s05 ~]# node上使用ipvadm查看service的转发情况(负载均衡情况)[root@mcwk8s05 ~]# yum install ipvsadm -y[root@mcwk8s05 ~]# ipvsadm -L -nIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:PortForward Weight ActiveConn InActConnTCP10.0.0.35:39719 rr#node ip : node port 就转发到下面三个pod的80服务上-> 172.17.13.2:80Masq100-> 172.17.13.4:80Masq100-> 172.17.21.3:80Masq100......TCP172.17.13.0:39719 rr-> 172.17.13.2:80Masq100-> 172.17.13.4:80Masq100-> 172.17.21.3:80Masq100......TCP172.17.13.1:39719 rr-> 172.17.13.2:80Masq100-> 172.17.13.4:80Masq100-> 172.17.21.3:80Masq100.......TCP 10.2.0.252:80 rr #service的cluster ip : port 提供集群内部访问service用的,这个端口和宿主机端口没关系,不是宿主机端口-> 172.17.13.2:80Masq100-> 172.17.13.4:80Masq100-> 172.17.21.3:80Masq100
[root@mcwk8s05 ~]# 浏览器上访问时
文章插图
谷歌浏览器成功访问,被调度到其中一个pod上了
文章插图
kubectl set 更新应用使用k8s,使用的是镜像 。我们需要更新应用,就是换新的镜像 。kubectl set可以替换镜像 。它还有一些子命令envUpdate environment variables on a pod templateimageUpdate image of a pod templateresources可以对资源,比如cpu等进行限制,Update resource requests/limits on objects with pod templatesselector修改标签,Set the selector on a resourceserviceaccount Update ServiceAccount of a resourcesubject角色绑定。Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBinding
kubectl -h
kubectl set -h
kubectl set image -h
我们可以层层去看帮助信息,找到我们需要的命令 。
【kubernetes之kubectl与YAML详解1】比如我们就用下面的改改,
文章插图
当我们请求网站的时候,响应头里面带了服务的版本信息
文章插图
我们将nginx改为1.14版本的镜像
kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
经验总结扩展阅读
- 丝绸之路开辟于什么朝代
- 流放之路S20卡兰德之湖赛季上线时间说明
- 2023年7月9日适不适合搬新家
- 回门酒的请帖怎么写 诚邀贵宾之请
- 真正“搞”懂HTTP协议03之时间穿梭
- 网络协议之:redis protocol 详解
- 信号量 C# 多线程访问之 SemaphoreSlim【C# 进阶】
- JavaScript之数组高阶API—reduce
- 奥比岛暗夜袭击第一轮金块失踪之谜通关攻略
- 青蟹为什么那么贵