理解k8s的网络:pods、Services、ingress
K8s的网络理解,特别是Pods、Services和Ingress,可以总结如下:PODs: 定义:Pods是构成kubernetes应用的基本单元,包含了一个或多个容器以及它们共享的网络栈。 网络命名空间:Pods的网络命名空间与宿主机的物理网络命名空间独立,通过自定义桥接与宿主机相连。
理解K8s的网络,特别是Pods、Services和Ingress,对于构建和维护在Kubernetes集群上的服务至关重要。Gemfield团队在将越来越多的服务迁移到Kubernetes集群后,通过阅读MEDIum上的三篇文章,对K8s的网络架构有了更深入的理解。以下是对K8s网络关键组件的总结。
Ingress资源 定义:Ingress是用于在Kubernetes集群中暴露从集群外部访问的服务的一种方式,类似于一个7层负载均衡器。 功能:通过Ingress可以建立映射规则,将外部请求转发到集群内部的服务。Ingress Controller负责将这些规则转换为nginx的配置。 核心概念: 服务引入:定义哪些服务可以通过Ingress访问。
LoadBalancer类型的Service除了NodePort功能外,还会在集群外部添加负载均衡设备,以实现更广泛的外部访问。另一种提供服务暴露的资源是Ingress,它通过一个NodePort或LB实现多个服务的暴露。
K8s服务调用的方法和原理,一篇文章给你说明白
通过服务名调用:在K8s中,服务提供了一种网络抽象,允许内部Pod间通过Service名进行通信。在普通Service中,服务间调用最为直接,通过服务名即可进行访问。例如,一个名为frontend的Service可以通过frontend或frontend.svc.cluster.local的dns名称访问同一命名空间内的服务。
在K8s中,服务(Service)提供了一种网络抽象,允许内部Pod间通过Service名进行通信。例如,一个名为frontend的Service可以通过frontend或frontend..svc.cluster.local的DNS名称访问同一命名空间内的服务。
服务账号(Service Account)是一种自动被启用的用户认证机制,使用经过签名的 持有者令牌来验证请求。 当服务账号创建后,k8s会自动生成对应的secret,存有可以用来认证的Token。 上面的token就可以用来认证。 所有使用token进行认证的请求 ,都要加上 Authorization 的 http请求头,其值格式为 Bearer TOKEN 。
理论 PV概念:PV是对K8S存储资源的抽象,一般由运维人员创建和配置,供容器申请使用。PV相当于对磁盘的分区,为容器提供存储空间。PVC概念:PVC是Pod对存储资源的一个申请,主要包括存储空间申请、访问模式等。创建PV后,Pod就可以通过PVC向PV申请磁盘空间。
如何在集群外部通过ip直连Pod?
如果要在集群外部访问pod,通常可以使用三种方式:NodePort,HostPort和LoadBalancer。其中NodePort最为常用,在每个kube-Proxy节点上开启代理端口以供外部访问。除此之外有没有别的办法可以在集群直接访问到Pod呢?答案是有的。
首先,确保办公网段与Kubernetes集群网段不同,实现网络连接的关键在于路由方案。建议选择三层路由方案或Host-GW,避免因数据包封包解包过程中路由方向丢失。我所用的集群是Calico,且关闭了IPIP模式。具体IP配置需依据Calico文档。选择Calico的Route Reflectors(RR)或Full-Mesh模式时,需权衡资源消耗。
OpenShift中存在三层IP地址概念,要从集群外部访问Pod中的应用,通常有两种方式。使用Ansible默认配置部署OpenShift集群时,在集群Infra节点上运行的HAProxy Pod会监听170.0.1上的10443和10444端口。Router服务的部署需要在集群Infra节点上实现,端口只能被占用一次。
通过vagrant+virtualbox安装k8s找不到pod问题
通过vagrant+virtualbox安装k8s集群的小伙伴都会碰到找不到pod的问题,但是通过API服务查看,这些pod却是活的好好的。 原因是 ,在virtualbox组网的过程中,采用了双网卡方案,网卡1使用NAT地址转换用来访问互联网,网卡2使用Host-only来实现虚拟机互相访问。
安装vagrant相对简单,首先下载virtualbox,然后通过vagrant命令行开始创建虚拟机。需要注意的是,vagrant默认与virtualbox集成,若想用vmware,需额外安装vmware utility。Windows 11用户可能遇到与virtualbox的兼容问题,建议考虑vmware作为替代。要创建虚拟机,需从vagrant官网获取box文件,如CentOS7的box。
新建/ETC/systemd/system/docker.service.d/http-proxy.conf,添加配置内容。安装virtualbox 安装k8s集群使用vagrant 参考jimmysong的vagrant教程 kubernetes-vagrant-centos-cluster,节点数量应根据个人机器配置调整(参考kubernetes-vagrant-centos-cluster)。
搭建一个k8s单机版,yaml已经创建好,但pod状态一直处于pend
1、资源不足:原因:如果集群中的资源不足,Pod可能无法被调度到任何节点上,从而处于Pending状态。解决方法:检查集群的资源使用情况,确保有足够的资源可供Pod使用。可以考虑增加节点或调整Pod的资源请求和限制。调度问题:原因:调度器可能由于某些原因无法找到合适的节点来部署Pod。
2、假设一位机器学习研究人员想要在PyTorch环境中使用基于python的gpu进行测试,她请求她的工程团队提供一个带有两个GPU的Jupyter笔记本,以及她所有的库。然而,工程团队告诉她这需要三天时间,包括获取GPU、创建堆栈以及授予对JupyterHub的访问权限。
3、针对k8s 10版本中coreDNS一直处于pending状态的问题,本文提供了一系列解决方案。首先,需要注意的是,当使用kubeadm init后,关闭cni可以解决部分问题。在进行kubeadm init操作前,应该在其他节点上也执行此操作,确保整个系统的一致性。对于kube-flannel.yml文件的修改,是一种推荐的解决方案。