第六章 通过Service访问Pod(上)
不应该直接使用Pod的ID地址作为对外提供服务的接口,应为一旦Pod重启,IP地址就变化了,解决方案是使用Service。
6.1 创建Service
K8s service从逻辑上代表了一组Pod,具体是哪些Pod则由label来挑选的。
service有自己的IP,而且这个IP是不变的,客户端只需要访问Service的IP,K8s负责建立和维护service和Pod的映射关系。无论Pod如何变化,对客户端无影响。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: httpd
spec:
replicas:
template:
metadata:
labels:
run: httpd # 定义label给service用
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80 # 容器对外暴露的端口
部署之后,可以直接通过IP地址(IP地址是随机的)访问Pod:
kubeusr@GalaxyKubernetesMaster:~$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
httpd-749bf8c6f4-d86vf / Running 5m 10.244.1.209 galaxykubernetes02
httpd-749bf8c6f4-lwp5g / Running 5m 10.244.2.113 galaxykubernetes03
httpd-749bf8c6f4-pldb4 / ContainerCreating 5m <none> galaxykubernetes01
kubeusr@GalaxyKubernetesMaster:~$ curl 10.244.1.209:
<html><body><h1>It works!</h1></body></html>
接下来定义service,并部署,
apiVersion: v1
kind: Service
metadata:
name: httpd-svc # service 名字
spec:
selector:
run: httpd # selector指明挑选 label为run:httpd 的Pod作为Service的后端。
ports:
- protocol: TCP
port: 8080 # service的端口; service的8080端口映射到Pod的80端口
targetPort: 80 # pod的端口
如下,httpd-svc分配到一个CLUSTER-IP 10.101.103.107。 可以通过该IP访问后端的httpd Pod
kubeusr@GalaxyKubernetesMaster:~$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpd-svc ClusterIP 10.101.103.107 <none> /TCP 6s
kubernetes ClusterIP 10.96.0.1 <none> /TCP 127d
kubeusr@GalaxyKubernetesMaster:~$ curl 10.101.103.107:8080
<html><body><h1>It works!</h1></body></html>
通过kubectl describe可以查看httpd-svc与pod的对应关系:
kubeusr@GalaxyKubernetesMaster:~$ kubectl describe service httpd-svc
Name: httpd-svc
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"httpd-svc","namespace":"default"},"spec":{"ports":[{"port":,"protocol":"TC...
Selector: run=httpd
Type: ClusterIP
IP: 10.101.103.107
Port: <unset> /TCP
TargetPort: /TCP
Endpoints: 10.244.1.209:80,10.244.2.113:80 # 罗列了三个Pod的id地址和端口。
Session Affinity: None
Events: <none>
第六章 通过Service访问Pod(上)的更多相关文章
- 第六章 通过Service访问Pod(中)
		
6.2 Cluster IP 底层实现 Cluster IP 是一个虚拟IP,是由K8s节点上的iptables规则管理的. 使用类似轮询的方法访问Pod. 6.3 DNS 访问Service 在Cl ...
 - 第六章 通过Service访问Pod(下)
		
6.4 外网如何访问service (1)ClusterIp: Service通过Cluster内部的IP对外提供服务,只有Cluster内的节点和Pod可以访问,这是默认的Service类型. (2 ...
 - linux运维、架构之路-K8s通过Service访问Pod
		
一.通过Service访问Pod 每个Pod都有自己的IP地址,当Controller用新的Pod替换发生故障的Pod时,新Pod会分配到新的IP地址,例如:有一组Pod对外提供HTTP服务,它们的I ...
 - k8s通过service访问pod(五)--技术流ken
		
service 每个 Pod 都有自己的 IP 地址.当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址.这样就产生了一个问题: 如果一组 Pod ...
 - k8s通过service访问pod(五)
		
service 每个 Pod 都有自己的 IP 地址.当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址.这样就产生了一个问题: 如果一组 Pod ...
 - 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)
		
本节开始学习 Service.我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会通 ...
 - 通过 Service 访问 Pod
		
我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会通过动态创建和销毁 Pod 来保 ...
 - 通过 Service 访问 Pod【转】
		
本节开始学习 Service.我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会通 ...
 - k8s通过Service访问Pod
		
如何创建服务 1.创建Deployment #启动三个pod,运行httpd镜像,label是run:mcw-httpd,Seveice将会根据这个label挑选PodapiVersion: apps ...
 
随机推荐
- JUnit出错,却没有显示任何报错信息【待解答】
			
JUnit测试代码如下: 原因分析: JUnit测试单元里,测试函数好像不能带参数? 解决办法: 发现测试函数testBookShopDaoUpdateBookStock(int isbn)里的参数i ...
 - 浅谈OSSemPost()和OSSemPend()
			
http://blog.csdn.net/goodman_lqifei/article/details/53616174
 - Redis的集群安装以及rehash重新迁移教程指南
			
1. Redis的cluster集群 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生存的看家本领,增加集群 ...
 - 将EasyRTMP_RTSP移植到Android平台实现的RTSP拉流转推RTMP直播流功能
			
本文转自EasyDarwin开源团队成员Kim的博客:http://blog.csdn.net/jinlong0603/article/details/73253044 前言 安防互联网化的需求已经越 ...
 - 深度学习(六十四)Faster R-CNN物体检测
 - Java基础部分全套教程.
			
这是我自己早前听课时整理的java基础全套知识,使用于初学者,也可以适用于中级的程序员,我做成了chm文档的类型,你们可以下载 笔记是比较系统全面,可以抵得上市场上90%的学习资料.讨厌那些随便乱写的 ...
 - does not contain bitcode  ShardSDK等三方库
			
今天升级了XCode到7.0 重新编译项目出现了下面这些错误提示, ShardSDK/ShareSDK.framework/ShareSDK' does not contain bitcode. ...
 - 判断IOS安装后是否是第一次启动
			
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]){ [[NSUserDefaults s ...
 - 用stack实现min stack
			
遇到个好玩的问题,就是用一个stack实现min stack,什么意思呢,就是我实现stack,但是能以O(1)的时间复杂度和空间复杂度去找到我stack里面的最小值. 常规的方法是:用一个变量存放当 ...
 - C# 速编神器LinqPad(新版5.25)
			
点此下载5.25 (支持.net4.6,有调试器)(页面有广告,一直点免费下载即可)(可用)密码 lp123456 批处理如下. @echo off start /b LINQPad.exe -n ...