不应该直接使用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(上)的更多相关文章

  1. 第六章 通过Service访问Pod(中)

    6.2 Cluster IP 底层实现 Cluster IP 是一个虚拟IP,是由K8s节点上的iptables规则管理的. 使用类似轮询的方法访问Pod. 6.3 DNS 访问Service 在Cl ...

  2. 第六章 通过Service访问Pod(下)

    6.4 外网如何访问service (1)ClusterIp: Service通过Cluster内部的IP对外提供服务,只有Cluster内的节点和Pod可以访问,这是默认的Service类型. (2 ...

  3. linux运维、架构之路-K8s通过Service访问Pod

    一.通过Service访问Pod 每个Pod都有自己的IP地址,当Controller用新的Pod替换发生故障的Pod时,新Pod会分配到新的IP地址,例如:有一组Pod对外提供HTTP服务,它们的I ...

  4. k8s通过service访问pod(五)--技术流ken

    service 每个 Pod 都有自己的 IP 地址.当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址.这样就产生了一个问题: 如果一组 Pod ...

  5. k8s通过service访问pod(五)

    service 每个 Pod 都有自己的 IP 地址.当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址.这样就产生了一个问题: 如果一组 Pod ...

  6. 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)

    本节开始学习 Service.我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会通 ...

  7. 通过 Service 访问 Pod

    我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会通过动态创建和销毁 Pod 来保 ...

  8. 通过 Service 访问 Pod【转】

    本节开始学习 Service.我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会通 ...

  9. k8s通过Service访问Pod

    如何创建服务 1.创建Deployment #启动三个pod,运行httpd镜像,label是run:mcw-httpd,Seveice将会根据这个label挑选PodapiVersion: apps ...

随机推荐

  1. JUnit出错,却没有显示任何报错信息【待解答】

    JUnit测试代码如下: 原因分析: JUnit测试单元里,测试函数好像不能带参数? 解决办法: 发现测试函数testBookShopDaoUpdateBookStock(int isbn)里的参数i ...

  2. 浅谈OSSemPost()和OSSemPend()

    http://blog.csdn.net/goodman_lqifei/article/details/53616174

  3. Redis的集群安装以及rehash重新迁移教程指南

    1. Redis的cluster集群 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生存的看家本领,增加集群 ...

  4. 将EasyRTMP_RTSP移植到Android平台实现的RTSP拉流转推RTMP直播流功能

    本文转自EasyDarwin开源团队成员Kim的博客:http://blog.csdn.net/jinlong0603/article/details/73253044 前言 安防互联网化的需求已经越 ...

  5. 深度学习(六十四)Faster R-CNN物体检测

  6. Java基础部分全套教程.

    这是我自己早前听课时整理的java基础全套知识,使用于初学者,也可以适用于中级的程序员,我做成了chm文档的类型,你们可以下载 笔记是比较系统全面,可以抵得上市场上90%的学习资料.讨厌那些随便乱写的 ...

  7. does not contain bitcode ShardSDK等三方库

    今天升级了XCode到7.0   重新编译项目出现了下面这些错误提示, ShardSDK/ShareSDK.framework/ShareSDK' does not contain bitcode. ...

  8. 判断IOS安装后是否是第一次启动

    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]){ [[NSUserDefaults s ...

  9. 用stack实现min stack

    遇到个好玩的问题,就是用一个stack实现min stack,什么意思呢,就是我实现stack,但是能以O(1)的时间复杂度和空间复杂度去找到我stack里面的最小值. 常规的方法是:用一个变量存放当 ...

  10. C# 速编神器LinqPad(新版5.25)

    点此下载5.25 (支持.net4.6,有调试器)(页面有广告,一直点免费下载即可)(可用)密码  lp123456  批处理如下. @echo off start /b LINQPad.exe -n ...