k8s 内部连接集群外部服务

1、EndPoint

k8s服务并不是和pod直接相连的。相反,有一种资源介于两者之间,他就是endpoint。endpoint资源就是暴露一个服务的ip地址和端口的列表。尽管在spec服务中定义了pod选择器,但在重定向传入连接时不会直接使用它。选择器用于构建ip和端口的列表,然后存储在ep中。当客户端连接到服务时,服务代理选择这些ip和端口对中的一个,并将传入连接重定向到在该位置监听的服务器。

如果创建了不包含pod选择器的服务,k8s将不会创建ep资源。

创建不包含pod选择器的svc:

apiVersion: v1
kind: Service
metadata:
  name: external-service
spec:
  ports:
  - port: 80

 

手动创建ep:

apiVersion: v1
kind: Endpoints
metadata:
  name: external-service
subsets:
  - addresses:
    - ip: 11.11.11.11
    - ip: 22.22.22.22
    ports:
    - port: 80

 

服务的名字必须和ep的对象名字相匹配

xxxx@localhost k8s_file % kubectl describe svc external-service

Name:              external-service
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.102.192.248
IPs:               10.102.192.248
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         11.11.11.11:80,22.22.22.22:80
Session Affinity:  None
Events:            <none>

 

2、externalName

除了手动配置服务的ep来替代公开外部服务的方法,还有一种更简单的方法,通过fqdn访问外部服务。externalName是实际服务的完全限定域名。

apiVersion: v1
kind: Service
metadata:
  name: external-service
spec:
  type: ExternalName
  externalName: www.xxx.com
  ports:
  - port: 80

 

可以通过external-service.default.svc.cluster.local 或者同一个ns 通过external-service访问。

posted @ 2022-07-06 23:51  腐汝  阅读(1273)  评论(0编辑  收藏  举报