在 Kubernetes 集群中,内部服务可通过 Service-name 进行访问。那么,对于集群外的服务,Pod 应该如何通过 Service 进行访问呢?一起来看看吧!

  • 此处举例以 Pod 访问集群外部的 Mysql 数据库

1、创建 Service

# 创建 Service 时不指定 Selector
# vi external-mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: external-mysql
  namespace: mysql
spec:
  ports:
    - port: 3306              # 服务公开的端口
      targetPort: 3306        # 同上
      protocol: TCP
      name: http
  type: ClusterIP
# 应用
kubectl apply -f external-mysql-service.yaml

2、创建 Endpoint

# 手动创建与 Service 同名的 Endpoint
# vi external-mysql-ep.yaml
apiVersion: v1
kind: Endpoints
metadata:
  name: external-mysql
  namespace: mysql
subsets:
  - addresses:
      - ip: 172.16.12.214    # 外部服务的 IP 地址
    ports:
      - port: 3306           # 与 Service 的 port 一致
        name: http           # 与 Service 的 port name 一致
# 应用
kubectl apply -f external-mysql-ep.yam

3、测试配置成功

# pod 中使用原始地址可登录数据库
mysql -h x.x.x.x -u root -p
# pod 中使用 service-name 测试正常登录数据库
mysql -h external-mysql -u root -p

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐