rancher中快速部署应用 · 志云的博客 (zhenglin.work)
Docker+Rancher容器部署Spring Cloud项目_ThinkMore-CSDN博客
Rancher+Docker实现SpringCloud容器部署 - 程序员大本营 (pianshen.com)
NodePort 只能在当前node节点上访问,集群其他node或外网无法访问 - 水中的火柴盒 - 博客园 (cnblogs.com)
解决:在各node上配置iptables,执行下面命令就行了 sudo iptables -P FORWARD ACCEPT
k8s外网如何访问业务应用 - 简书 (jianshu.com)
K8s-Service:nginx-svc,图中可见当前服务有两个POD(Endpoints)。
Nginx-svc Cluster-ip:10.0.0.27 (k8s分配的内部不变的虚拟ip)。
Port:nginx-svc的宿主机端口,通过此端口访问到此k8s-Service(集群内访问service)。
Targetport:映射的docker容器端口。
Selector:Pod选择器,Pod-Lable的条件过滤器。图中Selector表示,Service查找Lable中app=nginx的Pod。
Endpoints:nginx-svc各个pod的真实物理地址。
NodePort :各个pod的宿主机(node)上的nginx-svc代理端口,访问任意一个宿主机的37844端口,都能负载均衡访问nginx-svc服务(集群外访问service)。
k8s集群内部访问service:Cluster-ip:port、服务名.命名空间:port
k8s集群外部访问service:任意Node-ip:nodeport
port:service暴露在cluster ip上的端口,port 是提供给集群内部客户访问service的入口。
nodePort:nodePort是k8s提供给集群外部客户访问service入口的一种方式,nodePort 是提供给集群外部客户访问service的入口。
targetPort:targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。
port、nodePort总结:
总的来说,port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod上的容器内。
k8s集群内部访问service:Cluster-ip:port、服务名.命名空间:port
k8s集群外部访问service:任意Node-ip:nodeport
K8S中几种IP:
POD IP: pod的IP地址,是虚拟地址,无法ping通。
Cluster IP:Service的IP地址,是虚拟地址,无法ping通。他只能结合service:port一起使用。
Node IP:物理机IP地址。K8S集群外节点访问集群内节点,都需要通过Node IP。
k8s名词解释 | Rancher文档
Rancher 名词解释 | Rancher文档
rancher中的工作负载workload:相当于Service+Deployment(还有其他选项)+Pod的综合配置。
Kubernetes Service NodePort 外网访问_小楼一夜听春雨,深巷明朝卖杏花-CSDN博客
上图中Replication Controller可以替换为Deployment。
<宿主机
NodeIP>:
hostNetWork=ture , POD所有容器的端口直接映射到物理机端口。
3. NodePort (所有主机的NodePort 均可访问到Service)。一个k8s-Service在每一个部署此Service的Pod的Node宿主机上开设一个相同的固定Port,外部访问任意一个Node上的此Port时,都可以通过kube-proxy实现这个k8s-Service的负载均衡访问。 Cluster 外部可以通过 <
任意NodeIP>:
访问 Service。
如果没有为Service手工指定NodePort
,则k8s随机分配一个端口,NodePort
随机端口范围:30000-32767。
--proxy-mode=ipvs //将kube-proxy的模式设置为IPVS
--ipvs-scheduler=rr //设置ipvs的负载均衡算法,默认是rr
--ipvs-min-sync-period=5s // 刷新IPVS规则的最小时间间隔
--ipvs-sync-period=30s // 刷新IPVS规则的最大时间间隔
HostPort 与 NodePort 一个重要区别是,HostPort是宿主机端口直接映射POD。而 NodePort是访问到主机的kube-proxy,再通过服务的clusterip转发到任意pod中。
k8s中Service通过selector筛选Pod-lable,定义了一组Pods的逻辑集合和一个用于访问它们的策略。实现pod路由、配置网络模式、服务发现、负载均衡等。
服务与服务之间调用,可以直接通过Cluster-IP:服务端口 或 http://服务名.命名空间:服务端口(svc-port是内网端口,不是nodeport)。
又上可见k8s-Service会创建一个固定域名(服务名.命名空间)。
CoreDNS: K8S集群内部通过CoreDNS为服务提供域名解析服务。将Service域名解析成服务的ClusterIp。
创建两个Deployment,分别对应两个版本docker镜像,Lable设置相同的标签,比如:app=service1。两个Deployment启动后,会创建两种POD,且Lable都有app=service1。
单独创建一个Service,pod-selector设置为app=service1。
或者修改现有Service的pod-selector条件,让其可以调度两个不同Deployment创建的POD。
这样通过一个Service+两个Deployment,控制同一个服务下两个版本Pod的比例。
对集群内/外部提供负载均衡访问(轮序),ingress-nignx还支持权重路由、http-header/cookies路由、Session关联路由、灰度发布、URL重写转发、限流等功能。Ingress 注释 annotations 说明
Deployment环境变量优先级大于应用内自身配置。
无头服务没有Cluster-ip,不对外直接提供服务。
无头服务通过Selector选择POD,并为选中的POD创建固定DNS域名:PodName.无头服务名.命名空间(同一命名空间下的Pod可以省略命名空间)。被无头服务select的POD之间可以通过域名相互访问。
k8s之StatefulSet详解_k8s statefulset
StatefulSet是Deployment的特别版,也是一种创建和管理POD的控制器。
特性:
Pod一致性:包含次序(启动、停止次序,先启动-pod0,最后关闭-pod0)、网络一致性。此一致性与Pod相关,与被调度到哪个node节点无关;
稳定的次序:对于N个副本的StatefulSet,每个Pod都在[0,N)的范围内分配一个数字序号,且是唯一的;
稳定的网络:Pod-name模式为(statefulset名称)−(序号);通过Headless服务,为每一个POD提供固定的DNS域名:PodName.无头服务名.命名空间。
稳定的存储:通过VolumeClaimTemplate为每个Pod创建一个PV。删除、减少副本,不会删除相关的卷。
组成:
Headless Service:用来定义Pod网络标识域名( DNS domain),使POD可以通过固定域名相互访问。
StorgeClass:创建一个存储类。
PV:创建N个PV并且绑定刚创建的StorgeClass,一个POD对应一个PV。
volumeClaimTemplates :存储卷申请模板,绑定StorgeClass,并指定每个PVC申请存储大小。POD初始化时会根据模板创建PVC,PVC从存储类StorgeClass中绑定可用PV;
StatefulSet :定义具体应用,名为Nginx,有三个Pod副本,并为每个Pod定义了一个域名部署statefulset。
注意:
Headless Service与StatefulSet要有相同的POD-Selector,这样Headless Service才能为StatefulSet的POD创建固定域名。