1. 什么是Endpoint?

  1. 我们创建Service的时候会自动给我们创建一个同名的Endpoint资源,每一个同名的 Servie都有一个Endpoints资源,因为Service自己并不直接匹配后端Pod的标签,而是由Endpoint匹配的。这个匹配过程是由Endpoint控制器来完成的。Endpoint是由Endpoint控制器来控制的;

  2. 事实上我们Service不但能够把标签选择器选中的Pod识别为自己的后端端点。还能够对后端端点做"就绪状态检测"。如果后端的Pod是就绪的,就把它加到后端可用端点列表中来。否则就会移除掉。这个功能其实不是Service来做的,而是Service借助一个中间的组件。这个中间组件也是一个"标准的资源类型"。就叫做"Endpoint";

  3. Service通过Selector和Pod建立关联,K8s会根据Service关联到的PodIP信息组合成一个Endpoint,若Service定义中没有Selector字段,Service被创建时,Endpoint Controller不会自动创建Endpoint;

  4. 我们可以通过配置清单创建Service,而无需使用标签选择器,而后自行创建一个同名的Endpoint对象,指定对应的IP,这种一般用于将外部Mysql\Redis等应用引入kubernetes集群内部,让内部通过Service的方式访问外部资源;

  5. 官方文档: https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/endpoints-v1/#Endpoints

1.2 Service与Endpoints的关系?

Service对象借助Endpoint资源来观察和跟踪其后段端点,Eendpoint对象会根据Service标签选择器筛选出来的后端端点的IP地址分别保存在subsets.address字段和subsets.notReadyAddress字段中,它通过API-Server持续动态跟踪每个端点的状态变化,并及时反应到端点IP所属的字段;

  • subsets.address: 保存就绪Pod的IP,也就意味Service可以直接将请求调度给就绪下的Pod;

  • subsets.notReadyAddress: 保存未就绪Pod的IP,也就意味着Service不会将请求调度给归类为不就绪的Pod;

2. 自定义Endpoints,引入Mysql服务;

2.1 安装Mysql服务

1.下载安装Mysql或者Mariadb,这里直接安装Mariadb
[root@knative-k8s-master-139 ~]# apt install mariadb-server -y 2.设置开机自启动
[root@knative-k8s-master-139 ~]# systemctl enable mariadb --now
[root@knative-k8s-master-139 ~]# systemctl status mariadb

2.1.1 登陆Mysql并授权;

MariaDB [(none)]> grant all privileges on *.* to 'haitang'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

2.2 自定义Endpoints和Service

2.2.1 创建Service资源;

[root@knative-k8s-master-139 ~]#  cat service-endpoint-mysql.yaml
# 自定义Servie和endpoint
apiVersion: v1
kind: Service
metadata:
name: mysql-external
spec:
type: ClusterIP
ports:
- port: 3366 # 负载均衡的对外端口
targetPort: 3306 # 后端mysql的端口 [root@knative-k8s-master-139 ~]# kubectl apply -f service-endpoint-mysql.yaml

查看Service资源

[root@knative-k8s-master-139 ~]# kubectl get svc  mysql-external
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql-external ClusterIP 10.102.169.77 <none> 3366/TCP 22s

2.2.2 创建需要的Endpoints资源;

[root@knative-k8s-master-139 ~]#  cat service-endpoint-mysql.yaml
---
apiVersion: v1
kind: Endpoints
metadata:
name: mysql-external
subsets:
- addresses:
- ip: 10.x.x.xxx
ports:
- protocol: TCP
port: 3306 # 定义后端的端口是多少 root@kubernetes-node01:~# kubectl apply -f service-endpoint-mysql.yaml

可以看到后段端点的IP为节点IP;

[root@knative-k8s-master-139 ~]#  kubectl describe svc mysql-external
Name: mysql-external
Namespace: default
Labels: <none>
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP: 10.102.169.77
Port: <unset> 3366/TCP
TargetPort: 3306/TCP
Endpoints: 10.x.x.xx:3306
Session Affinity: None
Events: <none>

2.3 测试访问;

# 可通过Service的IP来访问
[root@tools-test-8444596cb5-xb86z /]# mysql -h 10.102.169.77 -P3366 -uhaitang -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.1.48-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> exit
Bye # 亦可以通过Service的Name访问。
[root@tools-test-8444596cb5-xb86z /]# mysql -h mysql-external -P3366 -uhaitang -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 34
Server version: 10.1.48-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>

kubernetes之Endpoint引入外部资源实践;的更多相关文章

  1. WPF中引入外部资源

    有时候需要在WPF中引入外部资源,比如图片.音频.视频等,所以这个常见的技能还是需要GET到. 第一步:在VS中创建一个WPF窗口程序 第二步:从外部引入资源,这里以引入图片资源为例 1)新建Reso ...

  2. jsp、css中引入外部资源相对路径的问题

    在jsp页面中添加base,可用相对路径: <% String path = request.getContextPath(); String basePath = request.getSch ...

  3. ThinkPHP5框架引入的css等外部资源文件没有生效

    静态资源文件一般是放在public目录里,不只是css,只要是静态资源文件都没有显示出来. (更好的阅读体验可访问 这里 ) 问题陈述 文件结构 文件内容 三个文件分别为:Index.php.test ...

  4. Istio ServiceEntry 引入外部服务

    概念及示例 使用服务入口Service Entry来添加一个入口到 Istio 内部维护的服务注册中心.添加了服务入口后,Envoy 代理可以向服务发送流量,就好像它是网格内部的服务一样.配置服务入口 ...

  5. ArcGIS for WPF 访问外部资源

    原文 http://www.cnblogs.com/wdysunflower/archive/2011/07/14/2105584.html ArcGIS for WPF 访问外部资源 应用背景: 因 ...

  6. 转:CI引入外部js与css

    其实不管是在用CI还是ZF都有同样一个问题,就是路径的问题.前期,我在用ZF做CMS时,我在.htaccess文件中设置了如遇到js,css,img等资源文件都不重定向.但今天在用CI时,却忘记了,搞 ...

  7. Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress(转发)

    原文 http://cloud.51cto.com/art/201804/570386.htm Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress 最近 ...

  8. Vue style里面使用@import引入外部css, 作用域是全局的解决方案

    问题描述 使用@import引入外部css,作用域却是全局的 <template> </template> <script> export default { na ...

  9. vue组件如何引入外部.js/.css/.scss文件

    可在相应的单vue组件引入相应文件. 1.引入外部.js文件. 2.引入外部.css文件. 使用@import引入外部css,作用域是全局的,也可在相应的单vue组件引入,import并不是引入代码到 ...

随机推荐

  1. 2.Tensor Shape《Pytorch神经网络高效入门教程》Deeplizard

            ,之后,我们张量和基础数据的形状酱油卷积运算来改变. 卷积改变了高度和宽度维度以及颜色通道的数量.

  2. 阶段性总结 GDOI 2022 PJ

    阶段性总结 GDOI 2022 PJ 比赛经过 Day ? ~ Day -1 半停课集训,补了很多东西,但是之前漏得太多了,结果是还有很多题没改 打了若干场 AtCoder ,承认自己思维的不足,训练 ...

  3. 2020 CSP-J 初赛游记

    估分 预估 85 分,一是怕选错,而是最后真的错了一些 考点 排列组合:论临时抱佛脚的作用 靠前看了一下捆绑法和插板法,果然考了. 2.算法常识,和复杂度分析 冒泡排序最小交换次数 = n-1 , G ...

  4. 面试突击58:truncate、delete和drop的6大区别

    在 MySQL 中,使用 truncate.delete 和 drop 都可以实现表删除,但它们 3 个的使用场景和执行效果完全不同,接下来我们来盘点一下. truncate.delete.drop区 ...

  5. JS:条件语句1

    条件语句: 1.if...else if (condition1) { 当条件 1 为 true 时执行 } else { 当条件 1 不为 true 时执行 } if (condition1) { ...

  6. 单片机 MCU 固件打包脚本软件

    ​ 1 前言 开发完 MCU 软件后,通常都会生成 hex 文件或者 bin 文件,用来做固件烧录或者升级,如果用来做产品开发,就涉及到固件版本的问题,初学者通常采用固件文件重命名来区分版本. 如果需 ...

  7. 详解SQL中Groupings Sets 语句的功能和底层实现逻辑

    摘要:本文首先简单介绍 Grouping Sets 的用法,然后以 Spark SQL 作为切入点,深入解析 Grouping Sets 的实现机制. 本文分享自华为云社区<深入理解 SQL 中 ...

  8. ArrayList源码深度剖析,从最基本的扩容原理,到魔幻的迭代器和fast-fail机制,你想要的这都有!!!

    ArrayList源码深度剖析 本篇文章主要跟大家分析一下ArrayList的源代码.阅读本文你首先得对ArrayList有一些基本的了解,至少使用过它.如果你对ArrayList的一些基本使用还不太 ...

  9. chrome请求cgi遇到net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

    测试一个web demo的时候,通过chrome请求板子上的web server的cgi时总是提示:net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) 搜遍整个 ...

  10. dolphinscheduler简单任务定义及复杂的跨节点传参

    dolphinscheduler简单任务定义及跨节点传参 转载请注明出处 https://www.cnblogs.com/funnyzpc/p/16395094.html 写在前面 dolphinsc ...