玩转k8s(四)—— 通过Service访问Pod
我们不应该期望k8s Pod是健壮的,而是要假设Pod中的容器很可能因为各种原因发生故障而死掉。Deployment等Controller会通过动态的创建和销毁Pod来保证应用整体的健壮性。换句话说,Pod是脆弱的,但应用是健壮的。
每个Pod都有自己的IP地址,当Controller用新的Pod替代发生故障的Pod时,新Pod会分配新的IP地址,这就产生了一个问题:如果一组Pod对外提供服务,它们的IP很有可能发生变化,那么客户端如何找到并访问这个服务呢?答案就是Service。
一、创建Service
K8s Service从逻辑上代表一组Pod,具体是哪些Pod则是由label来挑选的。Service有自己的IP,而且这个IP是不变的。客户端只需要访问Service的IP,k8s则负责建立和维护Service与Pod的映射关系。无论后端Pod如何变化,对客户端不会有任何影响,因为Service没有变。
(1)创建deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: httpd-deploymentlabels:app: httpd
spec:replicas: 3selector:matchLabels:app: httpdtemplate:metadata:labels:app: httpdspec:containers:- name: httpdimage: httpd:latestports:- containerPort: 80
(2)apply一下
zy@k8s-master:~$ kubectl apply -f httpd.yml
deployment.apps/httpd-deployment created
(3)查看pod
pod分配了各自的IP,这些IP只能被Kubernetes Cluster中的容器和节点访问。
zy@k8s-master:~$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
httpd-deployment-59fc85cfcd-kz4m8 1/1 Running 0 92s 10.244.1.17 k8s-node1 <none> <none>
httpd-deployment-59fc85cfcd-m2tc4 1/1 Running 0 92s 10.244.2.11 k8s-node2 <none> <none>
httpd-deployment-59fc85cfcd-nz4x5 1/1 Running 0 92s 10.244.2.12 k8s-node2 <none> <none>
(4)创建Service
编写service配置文件
apiVersion: v1
kind: Service
metadata:name: httpd-svc
spec:selector:run: httpdports:- protocol: TCPport: 8080targetPort: 80
以上代码是 Kubernetes 中的 YAML 文件,用于创建一个名为
httpd-svc
的 Service 资源。该 Service 资源会将流量路由到拥有标签run=httpd
的 Pod 上,同时将流量从端口 8080 转发到 Pod 中的端口 80。具体来说,代码的各个部分含义如下:
apiVersion: v1
: 指定 Kubernetes API 版本为 v1,也就是最基本的 API 版本。kind: Service
: 指定创建的资源类型为 Service。metadata
: 定义元数据,包括资源的名称等信息。name: httpd-svc
: 指定该 Service 资源的名称为httpd-svc
。spec
: 定义 Service 的规范,包括 Service 所要匹配的 Pod 标签以及端口信息。selector
: 指定 Service 所要匹配的 Pod 标签,这里是run=httpd
,表示该 Service 会将流量路由到所有拥有标签run=httpd
的 Pod 上。ports
: 定义 Service 的端口映射规则,包括协议、端口号和目标端口号。这里的含义是将 Service 的 8080 端口映射到 Pod 中的 80 端口上。
apply一下:
zy@k8s-master:~$ kubectl apply -f httpd-service.yml
service/httpd-svc created
查看service:
zy@k8s-master:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpd-svc ClusterIP 10.98.248.61 <none> 8080/TCP 3m13s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 26h
(5)查看service的详细信息
y@k8s-master:~$ kubectl describe service httpd-service
Name: httpd-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=httpd,run=httpd
Type: ClusterIP
IP: 10.102.206.215
Port: http 80/TCP
TargetPort: 80/TCP
Endpoints: 10.244.1.21:80,10.244.1.22:80,10.244.2.16:80
Session Affinity: None
Events: <none>
endpoints罗列了三个Pod的IP和端口。我们知道Pod的IP是在容器中配置的,那么service的集群IP又是在哪里配置的呢?集群IP如何映射到pod的IP呢?答案是 iptables
二、外网如何访问Service
出来Cluster内部可以访问Service,很多情况下我们也希望应用的Service能够暴露给Cluster外部。K8s提供了多种类型的Service,默认是ClusterIP。
(1)ClusterIP
Service通过集群内部的IP对外提供服务,只有Cluster内的节点和pod可访问,这是默认的service类型。
(2)NodePort
service通过Cluster节点的静态端口对外提供服务。Cluster外部可以通过 <NodeIP>:<NodePort>访问Service
(3)LoadBalancer
Service利用cloud provider 特有的负载均衡对外提供服务,云提供者负责将负载均衡的流量导向Service。
玩转k8s(四)—— 通过Service访问Pod相关推荐
- 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)
本节开始学习 Service. 我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会 ...
- .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查
目录 1.pod管理 2.重启策略 3.健康检查 4.进入容器 正文 上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod ...
- 每天五分钟玩转K8S(二)
接着上一篇,在安装完k8s后,就要开始对他进行折腾了!! 今天我们要做的就是对k8s的架构进行简单的学习(超级简单). 一.master节点 k8s cluster由master和node组成,节点上 ...
- K8S学习之service
service 一种可以访问后端pod的策略,通过访问service来访问到service关联的后端pod,通常是通过Label Selector实现的. 在kubernetes集群中有三类ip地址: ...
- 读书笔记-每天5分钟玩转k8s
一.K8s基本概念 一.Pod Pod 是容器的集合,通常会将紧密相关的一组容器放到一个 Pod 中,同一个 Pod 中的所有容器共享 IP 地址和 Port 空间,也就是说它们在一个 network ...
- 每天5分钟玩转K8S (看书笔记)
文章目录 第3章 部署k8s集群 安装docker 安装kubeadm,kubelet,kubectl 使用kubeadm创建集群 1.kubeadm初始化创建master 2.配置kubectl 3 ...
- 玩转k8s(二)—— Kubernetes架构
1. Master节点 Master是Kubernetes Cluster的大脑,运行这Daemon服务(守护进程)包括 kube-apiserver.kube-scheduler.kube-cont ...
- k8s中hostname, hosts文件, DNS和代理问题, service和pod的访问问题
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 验证一个域名的ip地址可以使用 nslookup xx.xx..xx 在kubernets中不同命名空间的服务相互访问 涉及到的是Pod和Servic ...
- k8s(四)—service服务(暴露方式:ClusterIP、NodePort、LoadBalancer、ExternalName、ingress)
1.service简介 2.开启kube-proxy的ipvs [root@server2 ~]# kubectl -n kube-system get pod | grep proxy 每个节点都有 ...
最新文章
- ASP 三十二条精华代码
- struts2中struts.xml的http://struts.apache.org/dtds/struts-2.3.dtd文件路径
- python读取c盘中的csv文件-python读取当前目录下的CSV文件数据
- 学习WINDOWS内核好书
- sql注入学习——布尔盲注
- CENTOS5下VSFTPD的设置
- 互联网公司常用MySQL分库分表方案
- 风控人应知的坏账准备金知识
- Vertica数据库系列:这几天踩过时间函数的坑
- php数据保存txt文件怎么打开方式_php - 利用保存在TXT文件(PHP)中的数组数据 - SO中文参考 - www.soinside.com...
- html和css基础整理
- PetaLinux 添加启动后自动执行脚本
- Android安装同应用不同版本,android一个应用如何在一个手机上装多个不同版本的方法...
- 网络安全之KALI使用
- 乱象丛生or一路光明,看SSD市场发展现状
- java存储protobuf_java中利用mongodb存储protobuf
- 2013腾讯马拉松编程初赛3月23日1001
- 有哪些句子帮你熬过崩溃期的?
- 【东华oj】复试练习题
- 文字拉伸css_CSS 3D拉伸文字
热门文章
- 使用forEach添加序号
- 携手四川受灾家人共渡难关--慰问与赈灾
- 036 《你喜欢的样子我都有》观后感
- 520 抖音哄女友图片动画+详细讲解
- android抖音点赞动画,iOS仿抖音点赞动画、波浪图、主张图、3D旋转、图片处理、播放器等源码...
- 第五届“强网杯”全国网络安全挑战赛 - 青少年专项赛 crypto
- photoshop位图与智能对象、矢量图形区别
- linux 备份手机照片,如何更安全有效的保存手机里的照片?
- 自学经验总结+实战:python爬虫的自我修养与每天微信给女朋友发一份直男日报
- 运动蓝牙耳机什么牌子好,运动蓝牙耳机品牌推荐