首页 > 其他分享 >k8s之ExternalName使用

k8s之ExternalName使用

时间:2024-04-16 10:13:45浏览次数:15  
标签:baidu name service Service dev ExternalName 使用 pod k8s

一、简介

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 的方式

image-20240415160022181

如果你在 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去解析。

image-20240415160146256

还可以安装DNS解析工具进行测试

yum install bind-utils
nslookup baidu

image-20240415160520841

三、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 一样。

标签:baidu,name,service,Service,dev,ExternalName,使用,pod,k8s
From: https://www.cnblogs.com/nwnusun/p/18137511

相关文章

  • 如何在Rust程序项目中安全地使用外部或是项目目录下的文件?
    在开发程序的时候难免会需要在程序中引入外部的文件,为了方便管理我们也常会将这些文件放置在程序项目目录下。然而在代码撰写程序路径于运行阶段读取文件时,文件路径的正确性需要等到运行阶段的时候才会知道,就算写错了而找不到这个文件,程序项目也是能成功通过编译,这就会使得程序在......
  • k8s之容器运行时
    Kubernetes中的容器运行时容器运行时(ContainerRuntime)是Kubernetes最重要的组件之一,负责真正管理镜像和容器的生命周期。Kubelet通过ContainerRuntimeInterface(CRI)与容器运行时交互,以管理镜像和容器。​ 容器运行时接口(ContainerRuntimeInterface(CRI))是Kube......
  • ASP.NET Core 8 Swagger UI 入门使用
    介绍Swashbuckle有三个主要组成部分:Swashbuckle.AspNetCore.Swagger:将SwaggerDocument对象公开为JSON终结点的Swagger对象模型和中间件。Swashbuckle.AspNetCore.SwaggerGen:从路由、控制器和模型直接生成SwaggerDocument对象的Swagger生成器。它通常与Swagger终......
  • day09_我的Java学习笔记 (ATM系统_理解并学会使用break、return、continue、Random、S
    ATM系统1.项目介绍与功能演示1.1系统准备、首页设计Account.java每个用户的账户信息都是一个对象,需要提供账户类。01.在Account类中定义系统相关的属性信息(卡号、姓名、密码、余额、取现额度)02.定义Getter和Setter方法03.定义有参构造器04.定义无参构造......
  • win10 vscode 插件使用
     翻译搜索复制......
  • 【Xss-fiddler漏洞测试】通过该种方式 可以批量扫描也可以使用super xary 进行图形扫
    下载xary-社区版生成xary证书xxxgencaChrome安装证书-设置-隐私安全-安全-管理证书-导入 Chrome安装代理 Fiddler设置转向代理 命令行启动xary 启动xary,启动被测试网站-一边操作一边查看--触发后的命中效果    ......
  • m基于FPGA的217卷积编码维特比译码verilog实现,包含testbench不使用IP核
    1.算法仿真效果Vivado2019.2   编码部分:   译码部分输出:   RTL图:   2.算法涉及理论知识概要2.1卷积编码       卷积编码是一种前向纠错编码方式,特别适用于无线通信和其他信道条件恶劣的应用场景。它主要通过卷积算子将信息序列映射成......
  • Go 标准库之 GoRequests 介绍与基本使用
    目录一、介绍二、安装三、导入四、基本使用4.1发送GET请求4.2POST请求发送JSON数据4.3Post文件上传4.4GoRequests使用代理4.5Gorequests使用session一、介绍官方文档DOC:https://pkg.go.dev/github.com/levigross/grequestsGithub:http://github.com/levigross/gr......
  • NTLM(NT LAN Manager)是一种Windows操作系统中使用的身份验证协议,用于验证用户的身份以
     NTLM(NTLANManager)是一种Microsoft开发的身份验证协议,用于在Windows网络环境中进行用户身份验证和访问控制。它起源于Microsoft的早期操作系统,最初是作为WindowsNT的一部分而引入的。NTLM的发展可以追溯到1990年代初,当时Microsoft开始研发WindowsNT操......
  • MySQL 中 DELETE 语句中可以使用别名么?
    1情境deletefromtest1t1wherenotexists(select1fromtest2t2wheret1.id=t2.id);以上sql报错:ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtouse......