k8s中service代理外部的服务
【摘要】 当我们的某个服务在外部集群的时候,但是又想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)