k8s中service代理外部的服务

举报
GeminiMp 发表于 2024/04/12 13:28:06 2024/04/12
【摘要】 当我们的某个服务在外部集群的时候,但是又想k8s集群内的应用连接它,这是可以创建一个service,用service代理外部服务,然后集群内就能连接该service,从而间接的访问外部服务。例如,我们的cloudquery 部署在虚拟机中,想要用 ingress 代理,可以这样做---apiVersion: v1kind: Servicemetadata: name: cloudquery...

当我们的某个服务在外部集群的时候,但是又想k8s集群内的应用连接它,这是可以创建一个service,用service代理外部服务,然后集群内就能连接该service,从而间接的访问外部服务。

例如,我们的cloudquery 部署在虚拟机中,想要用 ingress 代理,可以这样做

---
apiVersion: v1
kind: Service
metadata:
  name: cloudquery-svc
  namespace: mjerp-uat
spec:
  ports:
  - name: cloudquery                            #service端口的名称
    port: 80                                                    #service的端口
    protocol: TCP                                               #端口协议
  type: ClusterIP
 
---
apiVersion: v1
kind: Endpoints
metadata:
  name: cloudquery-svc                          #endpoint的名称一定要与service的名称一致
  namespace: mjerp-uat
subsets:
- addresses:
  - ip: 10.8.0.112                                      #定义外部服务地址
  ports:
  - port: 80                                                    #外部服务的端口
    name: cloudquery                            #端口的name,这个名称一定要与service端口的名称
    protocol: TCP                                               #端口协议,这个协议一定要与service的端口协议一致

查看两者是否关联

Name:              cloudquery-svc
Namespace:         mjerp-uat
Labels:            <none>
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.233.60.12
IPs:               10.233.60.12
Port:              cloudquery  80/TCP
TargetPort:        80/TCP
Endpoints:         10.8.0.112:80
Session Affinity:  None
Events:            <none>
 
 
Name:         cloudquery-svc
Namespace:    mjerp-uat
Labels:       <none>
Annotations:  <none>
Subsets:
  Addresses:          10.8.0.112
  NotReadyAddresses:  <none>
  Ports:
    Name        Port  Protocol
    ----        ----  --------
    cloudquery  80    TCP
 
Events:  <none>

这样就可以创建 ingress 指定service了、

1、创建service时不指定selector标签选择器,但需要指定service的port端口、端口的name、端口协议等,这样创建出来的service因为没有指定标签选择器就不会自动创建endpoint;
2、手动创建一个与service同名的endpoint,endpoint中定义外部服务的IP和端口,endpoint的名称一定要与service的名称一样,端口协议也要一样,端口的name也要与service的端口的name一样,不然endpoint不能与service进行关联。
完成以上两步,k8s会自动将service和同名的endpoint进行关联,这样,k8s集群内的应用服务直接访问这个service就可以相当于访问外部的服务了。

如果发现,创建的endpoint无法与service关联,必须要检查这4样:两者名称是否一样、两者端口协议是否一样、两者端口的name名称是否一样。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。