Fool's blog Fool's blog
首页
  • Ansible
  • Jenkins
  • Docker
  • Kubernetes
  • Linux常用命令
  • Git
  • Nginx
  • PVE
  • Samaba
  • Tcpdump
  • Python
  • Go
GitHub (opens new window)

The Fool

运维萌新
首页
  • Ansible
  • Jenkins
  • Docker
  • Kubernetes
  • Linux常用命令
  • Git
  • Nginx
  • PVE
  • Samaba
  • Tcpdump
  • Python
  • Go
GitHub (opens new window)
  • Docker

  • K8S

    • Kubernetes基础
    • K8S引入外部服务
      • 引入外部MySQL
      • 读写分离
  • 云原生
  • K8S
The Fool
2026-04-25
目录

K8S引入外部服务

# K8S引入外部服务

将外部服务抽象为内部 Service,好处都围绕一个核心:为应用提供一致的、K8s 原生的服务发现和访问体验。

只需要通过固定的 K8s 内部 DNS 名称(如 <service-name>.<namespace>.svc.cluster.local)就能访问。

# 引入外部MySQL

vim mysql-external-service.yaml
1
apiVersion: v1
kind: Service
metadata:
  name: mysql-external # 服务名,应用将通过此名称访问
  namespace: default
spec:
  type: ClusterIP      # 仅在集群内部可访问
  ports:
    - port: 3306       # Service 暴露的端口
      targetPort: 3306 # 目标端口,与 MySQL 端口一致
1
2
3
4
5
6
7
8
9
10
kubectl apply -f mysql-external-service.yaml
1
vim mysql-external-endpoints.yaml
1
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-external # 名称必须与上面的 Service 名称完全相同
  namespace: default
subsets:
  - addresses:
      - ip: 192.168.187.100 # 替换为你的外部 MySQL 真实 IP
     # - ip: 192.168.1.101 # 可以加多个实现负载均衡
    ports:
      - port: 3306
        protocol: TCP

1
2
3
4
5
6
7
8
9
10
11
12
13
kubectl apply -f mysql-external-endpoints.yaml
1

进入pod内部连接MySQL

[root@master external]# kubectl exec -it nginx-84bd7b58cc-jv5nj -- /bin/bash
1
root@nginx-84bd7b58cc-jv5nj:/# mysql -h mysql-external.default.svc.cluster.local -u root -p --skip-ssl
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
MariaDB [(none)]> create database zyj;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| zyj                |
+--------------------+
5 rows in set (0.001 sec)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

此时在外部连接MySQL

[root@zyj mysql]# mysql -u root -p
1
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| zyj                |
+--------------------+
5 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11

看到刚才创建的数据库,说明引入成功。

# 读写分离

实现读写分离就是分别创建两个svc和ep

vim mysql-write-svc.yaml
1
apiVersion: v1
kind: Service
metadata:
  name: mysql-write      # 服务名:应用写数据时连接这个域名
spec:
  type: ClusterIP
  ports:
    - port: 3306
---
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-write      # 名称必须与 Service 完全一致
subsets:
  - addresses:
      - ip: 192.168.1.100  # 这里只填主库 IP
    ports:
      - port: 3306
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vim mysql-read-svc.yaml
1
apiVersion: v1
kind: Service
metadata:
  name: mysql-read       # 服务名
spec:
  type: ClusterIP
  ports:
    - port: 3306
---
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-read       # 名称必须与 Service 完全一致
subsets:
  - addresses:
      - ip: 192.168.1.101  # 从库 1
      - ip: 192.168.1.102  # 从库 2
    ports:
      - port: 3306
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#Kubernetes
Kubernetes基础

← Kubernetes基础

最近更新
01
tcpdump
1-27
02
viper
12-20
03
Jenkins基础
12-19
更多文章>
Theme by Vdoing | Copyright © 2024-2026 The Fool
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式