k8s之ExternalName使用
一、简介
externalName Service是k8s中一个特殊的service类型,它不需要指定selector去选择哪些pods实例提供服务,而是使用DNS CNAME机制把自己CNAME到你指定的另外一个域名上,你可以提供集群内的名字,比如mysql.db.svc这样的建立在db命名空间内的mysql服务,也可以指定http://mysql.example.com这样的外部真实域名。
二、域名方式
ExternalName类型Service实例
例如,以下 Service 定义将 dev 名字空间中的 search 服务映射到 www.baidu.com
# baidu.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: v1
kind: Service
metadata:
name: baidu
namespace: dev
spec:
type: ExternalName
externalName: www.baidu.com
使用如下命令创建资源
[root@master service]# kubectl apply -f baidu.yaml
namespace/dev created
service/search created
[root@master service]#
创建成功如下
[root@master ~]# kubectl get all -n dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/baidu ExternalName <none> www.baidu.com <none> 3d4h
[root@master ~]#
本次我们创建2个客户端pod用来测试,一个在dev命名空间,一个在默认命名空间下
# pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: centos7-pod
namespace: dev
spec:
containers:
- name: centos7-container
image: centos:7
command: ["/bin/bash"]
args: ["-c", "sleep infinity"]
# pod2.yaml
apiVersion: v1
kind: Pod
metadata:
name: centos7-pod
# namespace: baidu
spec:
containers:
- name: centos7-container
image: centos:7
command: ["/bin/bash"]
args: ["-c", "sleep infinity"]
创建资源如下
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
centos7-pod 1/1 Running 0 100s
[root@master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
centos7-pod 1/1 Running 0 10m
[root@master ~]#
首先进入相同命名空间dev下的centos7 pod下,测试 externalName 类型 service DNS 服务发现
Kubernetes DNS 服务器是唯一的一种能够访问
ExternalName类型的 Service 的方式

如果你在 Kubernetes 命名空间 dev 中有一个名为 my-service 的 Service, 则控制平面和 DNS 服务共同为 my-service.my-ns 生成 DNS 记录。 名字空间 my-ns 中的 Pod 应该能够通过按名检索 <service_name>、<service_name>.、.<service_name>.svc.cluster.local 来找到服务,如果不是同一个命名空间,则只能采用.<service_name>.svc.cluster.local 访问。
进入默认defaluts命名空间下的pod测试,由于不在同一个ns,所以DNS无法直接通过servicename去解析。

还可以安装DNS解析工具进行测试
yum install bind-utils
nslookup baidu

三、IP方式
其中一个常见场景是在集群外部托管自己的数据库,例如在 Google 计算引擎实例中。如果您在 Kubernetes 内部和外部分别运行一些服务,或者需要在 Kubernetes 允许的基础上获得更多定制或控制,通常可采用上述这种方式。
在本例中,已经创建Mysql 三主机集群环境:192.168.2.129、192.168.2.145、192.168.2.135
现在我们有了 IP 地址,那么第一步就是创建服务:
# mysql.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
type: NodePort
ports:
ports:
- nodePort: 31760
port: 27017 # service 端口
protocol: TCP
targetPort: 3306 # pod端口
您可能会注意到此服务没有 Pod 选择器。此操作将创建一个服务,但它不知道往哪里发送流量。这样一来,您可以手动创建一个将从此服务接收流量的 Endpoints 对象。
# mysql-point.yaml
kind: Endpoints
apiVersion: v1
metadata:
name: mysql
subsets:
- addresses:
- ip: 192.168.2.129
ports:
- port: 3306
您可以看到 Endpoints 手动定义了数据库的 IP 地址,并且使用的名称与服务名称相同。Kubernetes 将 Endpoints 中定义的所有 IP 地址视为与常规 Kubernetes Pod 一样。
k8s之ExternalName使用的更多相关文章
- k8s系列---Service之ExternalName用法
需求:需要两个不同的namespace之间的不同pod可以通过name的形式访问 实现方式: A:在其他pod内ping [svcname].[namespace] ping出来到结果就是svc的ip ...
- Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群
Kubernetes简介 Kubernetes是Google基于Borg开源的容器编排调度引擎,作为CNCF(Cloud Native Computing Foundation)最重要的组件之一,它的 ...
- k8s的基本使用
一.kubectl的命令参数 1)kubectl 能使用的命令.即查看帮助 [root@k8s6 ~]# kubectl kubectl controls the Kubernetes cluster ...
- k8s对接ceph存储
前提条件:已经部署好ceph集群 本次实验由于环境有限,ceph集群是部署在k8s的master节点上的 一.创建ceph存储池 在ceph集群的mon节点上执行以下命令: ceph osd pool ...
- 对k8s service的一些理解
服务service service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务 举个例子一个a服务运行3个pod,b服务怎么访问a服务的pod, ...
- K8s基于DNS的服务发现(转)
原文地址:https://www.oschina.net/question/2657833_2201246 1.Kubernetes中如何发现服务 ◆ 发现Pod提供的服务 首先使用nginx-d ...
- Kubernetes(k8s)底层网络原理刨析
目录 1 典型的数据传输流程图 2 3种ip说明 3 Docker0网桥和flannel网络方案 4 Service和DNS 4.1 service 4.2 DNS 5 外部访问集群 5.1 外部访问 ...
- k8s之Service资源
1.Service概述 service是kubernetes中最核心的资源对象之一,service和pod之间是通过Label串起来,相同的Service的pod的Label是一样的.同一个servi ...
- k8s学习笔记
9.deployment:声明式的升级应用 9.1.使用RC实现滚动升级 #kubectl rolling-update kubia-v1 kubia-v2 --image=luksa/kubia:v ...
- k8s~k8s里的服务Service
k8s用命名空间namespace把资源进行隔离,默认情况下,相同的命名空间里的服务可以相互通讯,反之进行隔离. 服务Service 1.1 Service Kubernetes中一个应用服务会有一个 ...
随机推荐
- CD、VCD、DVD、BD 傻傻分不清楚?
CD 激光唱片(Compact Disk, CD),于 1982 年面世,最初用于存储数字音频.容量约 700 MB(80 分钟音频). 激光唱片 | 维基百科 VCD 影音光盘(Video Comp ...
- LaTeX 常用引用标签前缀
引用对象 标签前缀 Chapter ch Section sec Subsection sec Appendix app Figure fig Table tab List item itm Equa ...
- JMeter手机app录制
在移动应用的性能测试中,如何准确.全面地捕捉用户操作并生成可复用的测试脚本,始终是测试工程师面临的一大挑战.而JMeter,作为一款功能强大的开源性能测试工具,不仅在Web测试中表现优异,在手机App ...
- 全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型
全网最适合入门的面向对象编程教程:42 Python 常用复合数据类型-collections 容器数据类型 摘要: 在 Python 中,collections 模块提供了一组高效.功能强大的容器数 ...
- JDK有用的新特性-Java Record
目录 Java Record Record使用 Instance Methods 静态方法 Static Method Record 的构造方法 step1: 紧凑和定制构造方法 Record 与 与 ...
- cesium的使用
安装 建议使用vue的cesium插件:vue-cli-plugin-cesium.vue add命令可零配置添加cesium:vue add vue-cli-plugin-cesium 报错 添加完 ...
- C# WinForm避免程序重复启动,限制程序只能运行一个实例【转】
记录一下,原文:https://blog.csdn.net/xggbest/article/details/104231935 禁止多个进程运行,当重复运行时激活以前的进程 Program.cs: u ...
- Let's Encrypt Free SSL – Certify The Web
介绍 随着 Let's Encrypt 的普及. 现在为网站升级到 HTTPS 已经不需要付费了. Let's Encrypt 的 SSL 是免费的, 每 3 个月需要更新一次. 可以完全用 API ...
- CSS——了解
导入方式: 选择器
- [namespace hdk] string
#include<bits/stdc++.h> using namespace std; namespace hdk{ const int siz=100001; class string ...