Kubernetes--服务发现机制

      服务发现机制指客户端应用在一个Kubernetes集群中如何获知后端服务的访问地址。Kubernetes提供两种供客户端应用以固定的方式获取后端服务的访问地址:环境变量DNS方式。

 

一、环境变量
     在一个Pod运行起来的时候,系统会自动为其容器运行环境注入所有集群中有效的Service信息。Service的相关信息包括服务IP、服务端口号、各端口号相关的协议等,通过{SVCNAME}_SERVICE_HOST和{SVCNAME}_SERVICE_PORT格式进行设置。其中,SVCNAME的命名规则为:将Service的name字符串转换为全大写字符,将中横线“-”替换为“_”
apiVersion: v1
kind: Service
metadata:
  name: webapp
spec:
  ports:
  - port: 8081 #Service所需的虚拟端口号
    targetPort: 8080  #指定后端Pod的端口号
  selector:
    app: webapp

   在一个新建的Pod(客户端应用)中,可以看到系统设置的环境变量如下:

    然后客户端应用能够根据Service相关环境变量的命名规则,从环境变量中获取需要访问目标服务的地址:

curl http://${WEBAPP_SERVICE_HOST}:${WEBAPP_SERVICE_PORT}
二、DNS方式
    Service在Kubernetes系统中遵循DNS命名规范,Service的DNS域名表示方法为<servicename>.<namespace>.svc.<clusterdomain>,其中servicename为服务的名称,namespace为其所在的namespace名称,clusterdomain为Kubernetes集群设置的域名后缀(例如cluster.local)、
    对于客户端应用来说,DNS的域名格式的Service名称提供的是稳定的、不变的访问地址,可以简化客户端应用的配置,是Kubernetes中推荐使用的方式。
    当Service以DNS域名形式进行访问是,需要在Kubernetes集群中存在一个DNS服务器来完成域名到ClusterIP地址的解析工作,目前有CoreDNS作为Kubernetes集群中的默认DNS服务器提供域名解析服务。
    另外,Service定义中的端口号如果设置了名称( name ),则端口号也会拥有一个DNS域名,在DNS服务器中以SRV记录的格式保存:_<portname>._<protovaol>.<servicename>.<namespace>.svc.<clusterdomain>,其值为端口号的数值。
apiVersion: v1
kind: Service
metadata:
  name: webapp
spec:
  ports:
  - protocol: TCP
    port: 8080   #Service所需的虚拟端口号
    targetPort: 8080  #指定后端Pod的端口号
    name: http
  selector:
    app: webapp

    解析名为“http”端口号的DNS SRV记录“_http_._tcp.webpp.default.svc.cluster.local”,可以查询到端口号为8080

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes,也称为K8s,是一个开放源代码系统,用于跨多个主机管理容器化的应用程序。 Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统。 它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。 Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。该项目托管在 CNCF。 Kubernetes 特性: 自动化上线和回滚 Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。你应该充分利用不断成长的部署方案生态系统。 服务发现与负载均衡 无需修改你的应用程序即可使用陌生的服务发现机制Kubernetes容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。 服务拓扑(Service Topology) 基于集群拓扑的服务流量路由。 存储编排 自动挂载所选存储系统,包括本地存储、诸如 GCP 或 AWS 之类公有云提供商所提供的存储或者诸如 NFS、iSCSI、Gluster、Ceph、Cinder 或 Flocker 这类网络存储系统。 Secret 和配置管理 部署和更新 Secrets 和应用程序的配置而不必重新构建容器镜像,且 不必将软件堆栈配置中的秘密信息暴露出来。 自动装箱 根据资源需求和其他约束自动放置容器,同时避免影响可用性。将关键性工作负载和尽力而为性质的服务工作负载进行混合放置,以提高资源利用率并节省更多资源。 批量执行 除了服务之外,Kubernetes 还可以管理你的批处理和 CI 工作负载,在期望时替换掉失效的容器。 IPv4/IPv6 双协议栈 为 Pod 和 Service 分配 IPv4 和 IPv6 地址 水平扩缩 使用一个简单的命令、一个 UI 或基于 CPU 使用情况自动对应用程序进行扩缩。 自我修复 重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们公布给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值