kubernetes之Endpoint引入外部资源实践;

十念  金牌会员 | 2022-9-16 17:20:16 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 676|帖子 676|积分 2028

1. 什么是Endpoint?


  • 我们创建Service的时候会自动给我们创建一个同名的Endpoint资源,每一个同名的 Servie都有一个Endpoints资源,因为Service自己并不直接匹配后端Pod的标签,而是由Endpoint匹配的。这个匹配过程是由Endpoint控制器来完成的。Endpoint是由Endpoint控制器来控制的;
  • 事实上我们Service不但能够把标签选择器选中的Pod识别为自己的后端端点。还能够对后端端点做"就绪状态检测"。如果后端的Pod是就绪的,就把它加到后端可用端点列表中来。否则就会移除掉。这个功能其实不是Service来做的,而是Service借助一个中间的组件。这个中间组件也是一个"标准的资源类型"。就叫做"Endpoint";
  • Service通过Selector和Pod建立关联,K8s会根据Service关联到的PodIP信息组合成一个Endpoint,若Service定义中没有Selector字段,Service被创建时,Endpoint Controller不会自动创建Endpoint;
  • 我们可以通过配置清单创建Service,而无需使用标签选择器,而后自行创建一个同名的Endpoint对象,指定对应的IP,这种一般用于将外部Mysql\Redis等应用引入kubernetes集群内部,让内部通过Service的方式访问外部资源;
  • 官方文档: 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. 1.下载安装Mysql或者Mariadb,这里直接安装Mariadb
  2. [root@knative-k8s-master-139 ~]#  apt install mariadb-server -y
  3. 2.设置开机自启动
  4. [root@knative-k8s-master-139 ~]#  systemctl enable mariadb --now
  5. [root@knative-k8s-master-139 ~]#  systemctl status mariadb
复制代码
2.1.1 登陆Mysql并授权;
  1. MariaDB [(none)]> grant all privileges on *.* to 'haitang'@'%' identified by '123456';
  2. Query OK, 0 rows affected (0.00 sec)
  3. MariaDB [(none)]> flush privileges;
  4. Query OK, 0 rows affected (0.00 sec)
复制代码
2.2 自定义Endpoints和Service

2.2.1 创建Service资源;
  1. [root@knative-k8s-master-139 ~]#  cat service-endpoint-mysql.yaml
  2. # 自定义Servie和endpoint
  3. apiVersion: v1
  4. kind: Service
  5. metadata:
  6.   name: mysql-external
  7. spec:
  8.   type: ClusterIP
  9.   ports:
  10.   - port: 3366      # 负载均衡的对外端口
  11.     targetPort: 3306 # 后端mysql的端口
  12.        
  13. [root@knative-k8s-master-139 ~]#  kubectl apply -f service-endpoint-mysql.yaml
复制代码
查看Service资源
  1. [root@knative-k8s-master-139 ~]# kubectl get svc  mysql-external
  2. NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
  3. mysql-external   ClusterIP   10.102.169.77   <none>        3366/TCP   22s
复制代码
2.2.2 创建需要的Endpoints资源;
  1. [root@knative-k8s-master-139 ~]#  cat service-endpoint-mysql.yaml
  2. ---
  3. apiVersion: v1
  4. kind: Endpoints
  5. metadata:
  6.   name: mysql-external
  7. subsets:
  8.   - addresses:
  9.     - ip: 10.x.x.xxx
  10.     ports:
  11.     - protocol: TCP
  12.       port: 3306   # 定义后端的端口是多少
  13. root@kubernetes-node01:~# kubectl apply -f service-endpoint-mysql.yaml
复制代码
可以看到后段端点的IP为节点IP;
  1. [root@knative-k8s-master-139 ~]#  kubectl describe svc mysql-external
  2. Name:              mysql-external
  3. Namespace:         default
  4. Labels:            <none>
  5. Annotations:       <none>
  6. Selector:          <none>
  7. Type:              ClusterIP
  8. IP:                10.102.169.77
  9. Port:              <unset>  3366/TCP
  10. TargetPort:        3306/TCP
  11. Endpoints:         10.x.x.xx:3306
  12. Session Affinity:  None
  13. Events:            <none>
复制代码
2.3 测试访问;
  1. # 可通过Service的IP来访问
  2. [root@tools-test-8444596cb5-xb86z /]# mysql -h 10.102.169.77  -P3366 -uhaitang -p123456
  3. Welcome to the MariaDB monitor.  Commands end with ; or \g.
  4. Your MariaDB connection id is 32
  5. Server version: 10.1.48-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04
  6. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  7. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  8. MariaDB [(none)]> exit
  9. Bye
  10. # 亦可以通过Service的Name访问。
  11. [root@tools-test-8444596cb5-xb86z /]# mysql -h mysql-external  -P3366 -uhaitang -p123456
  12. Welcome to the MariaDB monitor.  Commands end with ; or \g.
  13. Your MariaDB connection id is 34
  14. Server version: 10.1.48-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04
  15. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  16. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  17. MariaDB [(none)]>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表