Kubernetes Service&LB&Networking:Services

Service 创建

1、With Label Selector

使用标签选择器创建服务,Service 直接关联 Pod,示例:部署 Mysql (细节见文末附录1),再创建服务:

2、Without Label Selector

Service 通常抽象化访问 Pods,但 Service 也可以抽象化访问其他类型的后端服务。例如:

你希望在生产中访问外部数据库群集(k8s 外),但在测试中你希望使用自己的数据库(k8s 内);

你希望将你的服务指向另一个名称空间或另一个群集中的服务;

你正在将服务迁移到 Kubernetes,而其中一些后端运行在 Kubernetes 之外。

示例:

① 在 minikube 中使用 Docker 启动一个 Mysql 容器(与 Kubernetes 无任何关系)

② 创建不带标签选择器的 Service :

③ 创建 Endpoints 将 mysql-service-outside 映射到 mysql

④ 测试使用 mysql-service-outside 作为入口访问 Mysql

3、ExternalName ServiceExternalName Service 是没有选择器的特殊服务,它没有定义任何端口或端点。查找主机 时,集群 DNS 服务将返回值为 的 CNAME 记录。访问这种服务的方式与其他服务一样,唯一的区别在于重定向发生在 DNS 级别,并且没有代理或转发发生。

服务发现

Kubernetes 支持 2 中发现服务的方式:环境变量 和 DNS。

1、环境变量

当 Pod 在节点中运行,kubelet 会为每个 active 状态的服务添加一组环境变量。它支持 Docker links compatible 变量(请参阅 makeLinkVariables )和更简单的 和 变量,其中服务名称为大写,破折号转换为下划线。

示例:服务 redis-master 暴露 TCP 端口 6379 且已分配了clusterIP 地址10.0.0.11 , 会生成以下环境变量:

如何应用这些变量呢?

示例:创建 Mongo 服务(细节见文末附录 2),创建 Mongo-Express 服务连通 Mongo 服务

如上所示,使用 引用环境变量

2、DNS

DNS Server 是一个非常推荐的可选的集群插件,它观察 Service 相关 API 动态管理 DNS 记录。如果在整个集群中启用了 DNS,则所有的 Pod 应该能够自动进行服务的名称解析。

示例,假设在 [Namespace] 中创建 [Service] ,则会生成一条 DNS 记录 ,则在 [Namespace] 中的 Pod 都可以通过 找到这个服务;如果在集群内的其他 [Namespace] ,则需要通过 来发现这个服务。

示例:通过 DNS 方式连通 Mongo 和 Mongo-Express,只需修改为如下即可:

发布服务 - Service Types

Service 支持如下几种类型,默认是 :

: 暴露服务在一个集群内部的 IP,此类型只支持内部访问服务。

: 暴露服务在集群每个节点的静态端口. 在集群外部通过 即可访问集群内的服务。

: 通过云供应商提供的负载均衡器暴露服务。将自动创建外部负载平衡器路由到的 NodePort 和 ClusterIP 服务。

: 相当于 DNS 的 CNAME,上述有示例。

示例:通过 暴露 Mongo-Express 服务

多端口 Service

示例:http 和 https 服务

附录

1、Mysql Deployment 创建

2、MongoDB Deployment 创建

最好的赞赏

就是你的关注

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180605B07UYJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券