Kubernetes中的服务是一个抽象,它定义了一组逻辑Pod和一个访问它们的策略。服务允许从属Pod之间的松散耦合。与所有Kubernetes对象一样,使用YAML (首选)或JSON 定义服务。服务所针对的Pod集合通常由LabelSelector确定。

尽管每个Pod都具有唯一的IP地址,但如果没有服务,这些IP不会在群集外部公开。服务允许您的应用程序接收流量。通过type在ServiceSpec中指定a ,可以以不同方式公开服务:

  • ClusterIP(默认) - 在群集中的内部IP上公开服务。此类型使服务只能从群集中访问。
  • NodePort - 使用NAT在集群中每个选定节点的同一端口上公开服务。使用可从群集外部访问服务<NodeIP>:<NodePort>。ClusterIP的超集。
  • LoadBalancer - 在当前云中创建外部负载均衡器(如果支持),并为服务分配固定的外部IP。NodePort的超集。
  • ExternalName - externalName通过返回带有名称的CNAME记录,使用任意名称(在规范中指定)公开服务。没有代理使用。此类型需要v1.7或更高版本kube-dns

1. 查看现有的部署
[root@master ~]# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1/1 1 1 4h12m

  

2. 通过expose命令和NodePort参数创建一个新服务
[root@master ~]# kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
service/kubernetes-bootcamp exposed

  

3. 查看创建的服务
[root@master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d12h
kubernetes-bootcamp NodePort 10.98.200.115 <none> 8080:31238/TCP 16s

 

查看详细信息

[root@master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d13h
kubernetes-bootcamp NodePort 10.98.200.115 <none> 8080:31238/TCP 12m
[root@master ~]# kubectl describe service/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
Labels: run=kubernetes-bootcamp
Annotations: <none>
Selector: run=kubernetes-bootcamp
Type: NodePort
IP: 10.98.200.115
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 31238/TCP
Endpoints: 10.244.0.15:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
  •   8080: Pod的端口
  • 31238: NodePort,对集群外部公开
  • Endpoints: Pod的IP+端口
4.  打印NodePod
[root@master ~]# export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
[root@master ~]# echo NODE_PORT=$NODE_PORT
NODE_PORT=31238

  

5. 访问服务
[root@master ~]# curl http://192.168.0.10:31238
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7f56b875dc-6zbjt | v=1

  

6. 为Pod创建标签
[root@master ~]# export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
[root@master ~]# echo Name of the Pod: $POD_NAME
Name of the Pod: kubernetes-bootcamp-7f56b875dc-6zbjt
[root@master ~]# kubectl label pod $POD_NAME app=v1
pod/kubernetes-bootcamp-7f56b875dc-6zbjt labeled
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-7f56b875dc-6zbjt 1/1 Running 0 4h52m
[root@master ~]# kubectl describe pods
Name: kubernetes-bootcamp-7f56b875dc-6zbjt
Namespace: default
Priority: 0
PriorityClassName: <none>
Node: master/192.168.0.10
Start Time: Fri, 25 Jan 2019 09:55:50 +0800
Labels: app=v1

  

7. 通过标签查找Pod
[root@master ~]# kubectl get pods -l app=v1
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-7f56b875dc-6zbjt 1/1 Running 0 4h55m

  

8. 通过标签删除服务
kubectl delete service -l run=kubernetes-bootcamp

  

k8s(4)-使用服务公开应用程序的更多相关文章

  1. k8s(5)-拓展服务

    在之前我们创建了一个部署,然后通过服务公开它.部署只创建了一个Pod来运行我们的应用程序.当流量增加时,我们需要扩展应用程序以满足用户需求. 通过更改部署中的副本数来完成扩展. 1. 拓展部署 这里将 ...

  2. Kubernetes公开应用程序

    pod丢失之后,怎样让程序正常工作. service的概念和作用 标签 Pods 是有生命周期的.当一个工作节点死后,运行在该节点上的pods也会丢失.然后,通过创建新的pods来保持应用程序运行,R ...

  3. ASP.NET Core基于K8S的微服务电商案例实践--学习笔记

    摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...

  4. 使用Rancher在K8S上部署高性能PHP应用程序

    介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...

  5. Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析

    参考:Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析 一句话概括一下Android应用程序显示的过程:Android应用程序调用SurfaceFlin ...

  6. C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe

    不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以 ...

  7. [转]C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe

    写在前面 原文地址:C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe 这篇文章躺在我的收藏夹中有很长一段时间了,今天闲着没事,就自己动手实践了一下.感觉 ...

  8. 为C# Windows服务添加安装程序

    最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻塞系统,不用用户登录之类.哈哈,扯远了,今天讲一下那个怎么给Windows服务做个安 ...

  9. C#创建服务及使用程序自动安装服务

    .NET创建一个即是可执行程序又是Windows服务的exe 不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给 ...

随机推荐

  1. C#自动识别文件编码

    以下代码源自:http://www.cnblogs.com/stulzq/p/6116627.html /// <summary> /// 用于取得一个文本文件的编码方式(Encoding ...

  2. GMA Round 1 极坐标的忧伤

    传送门 极坐标的忧伤 为什么你们不喜欢为我求导……——极坐标 极坐标的心意,想必已经传达到了,那么请为极坐标方程$r=t$(也写作$ρ=θ$)求导吧. 为了考验你的忠诚,你需要回答$r=t$在(0,$ ...

  3. 挖矿病毒 qW3xT.2 最终解决方案

    转自:https://blog.csdn.net/hgx13467479678/article/details/82347473 1,cpu 100%, 用top 查看cpu100 2,删掉此进程 c ...

  4. .Net转Java.04.踩到switch的坑

    今天线上有个NullPointerException 的异常,我翻了一下代码,抛异常的竟然是switch语句 我有种不祥的预感,本地做了实验 结果是 Java的switch如果传入null值,会抛出  ...

  5. Pipenv和Python虚拟环境

    Pipenv & 虚拟环境 本教程将引导您完成安装和使用 Python 包. 它将向您展示如何安装和使用必要的工具,并就最佳做法做出强烈推荐.请记住, Python 用于许多不同的目的.准确地 ...

  6. UseSwagger

    if [ "$UseSwagger" != "true" ]; then sed -i "s/\"UseSwagger\": tr ...

  7. ZMQ示例:使用 curve 进行加密通信

    1. ZMQ 官方文档 ZMQ 的官方文档中关于 curve 的介绍如下: Client and server roles A socket using CURVE can be either cli ...

  8. top 命令

    首先介绍top中一些字段的含义: VIRT:virtual memory usage 虚拟内存1.进程"需要的"虚拟内存大小,包括进程使用的库.代码.数据等 2.假如进程申请100 ...

  9. 生成建表脚本up_CreateTable

    已经很久没用使用这个脚本了,今天用到,并做修改,增加了生成扩展属性功能. Go if object_ID('[up_CreateTable]') is not null Drop Procedure ...

  10. james2.3 配置收件 之 MariaDB数据库配置

    james我们公司一直都是使用的2.3这个稳定版本,现在已经有3.0了,不过无所谓,能用就行 基于2.3,来进行一些配置,主要是接受邮件,之前的博文如何安装的,这里不多做介绍了,链接参考:https: ...