怎么使用Kubernetes服务暴露app

发布时间:2022-01-04 14:10:06 作者:iii
来源:亿速云 阅读:158

本篇内容介绍了“怎么使用Kubernetes服务暴露app”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Kubernetes服务概述

Kubernetes Pods 是会挂掉的。 Pods 实际上是有生命周期的。 当一个工作节点死亡时,运行在该节点上的 Pods也会丢失。 ReplicaSet能通过创建新的pod来动态地将集群恢复到所需状态,以保持应用程序运行。 另一个例子是,考虑一个带有3个副本的图像处理后端。 这些副本是可以交换的; 前端系统不应该关心后端副本,甚至不应该关心Pod丢失和重新创建。 也就是说,Kubernetes集群中的每个Pod都有一个惟一的IP地址,甚至是同一个节点上的Pod,因此需要一种自动协调Pod之间更改的方法,以便您的应用程序继续运行。

Kubernetes中的服务是一个抽象概念,它定义了一组逻辑Pods和访问它们的策略。 服务支持独立的Pods之间的松散耦合。 服务是使用YAML (preferred) 或JSON定义的,就像所有Kubernetes对象一样。 服务所针对的pod集合通常由标签选择器决定。

虽然每个Pod都有一个惟一的IP地址,但是如果没有服务,这些IP不会暴露在集群之外。 服务允许应用程序接收流量。 通过在ServiceSpec中指定类型,可以以不同的方式公开服务:

ClusterIP(默认) -- 在集群中的内部IP上暴露服务。 这种类型使得服务只能从集群内部访问。

NodePort -- 使用NAT在集群中每个选定节点的相同端口上暴露服务。 使用 <NodeIP>:<NodePort> 让服务可以从集群外部访问。 Superset of ClusterIP.

LoadBalancer -- 在当前云中创建一个外部负载均衡器(如果支持),并向服务分配一个固定的外部IP。 Superset of NodePort.

ExternalName -- 通过返回带有名称的CNAME记录,使用任意名称(由规范中的externalName指定)暴露服务。 不使用代理。 这种类型需要v1.7或更高的 kube-dns

关于不同类型的服务的更多信息可以在使用源IP教程中找到。 也请看 Connecting Applications with Services.

另外,请注意,有些服务用例没有在 spec 中定义 selector 。 没有 selector 的服务被创建时也不会创建相应的端点对象。 这允许用户手动将服务映射到特定的端点。 没有选择器的另一种可能是您严格使用type: ExternalName。

服务和标签

怎么使用Kubernetes服务暴露app

服务在一组 Pods 之间路由流量。 服务是一种抽象,它允许pod死亡并且在Kubernetes中存在多复本而不会影响应用程序。 依赖于 Pods (如应用程序中的前端和后端组件)之间的发现和路由是由Kubernetes服务处理。 服务使用标签和选择器匹配一组pod,选择器是允许对Kubernetes中的对象进行逻辑操作的分组原语。 标签是附加到对象上的 key/value对,可以以任何方式使用:

怎么使用Kubernetes服务暴露app

标签可以在创建时或以后附加到对象上。 它们可以随时被修改。 可以使用下面的环境练习服务暴露。

  1. kubectl get 命令可以查看现有的Pods: kubectl get pods

  2. kubectl get services命令可以查现有的服务: kubectl get services 命令结果可以看到有一个名为kubernetes的服务,它是在minikube启动集群时默认创建的。

  3. 要创建一个新服务并将其公开给外部流量,我们将使用带有NodePort参数的expose命令 (minikube还不支持LoadBalancer选项): kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 ,接着再运行kubectl get services查看服务。 我们现在有一个正在运行的服务叫做kubernetes-bootcamp。 在这里,我们看到服务接收到一个惟一的集群ip、一个内部端口和一个外部ip ( 节点的IP )。

  4. 为了查明外部打开了哪个端口(通过NodePort选项),我们将运行describe service命令 : kubectl describe services/kubernetes-bootcamp

  5. 创建一个名为 NODE_PORT的环境变量,该变量具有指定的节点端口的值 : export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}');echo "NODE_PORT=$NODE_PORT"

  6. 现在,我们可以使用curl、节点的IP和外部公开的端口测试应用程序是否在集群外部公开 curl $(minikube ip):$NODE_PORT

“怎么使用Kubernetes服务暴露app”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. K8S 之 服务暴露Ingress Traefik 安装
  2. Kubernetes服务调度

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubernetes

上一篇:mysql如何查询多个字段

下一篇:JS的script标签属性有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》