飞鼠异地组网工具实战之访问k8s集群内部服务
- 一、飞鼠异地组网工具介绍
-
- [1.1 飞鼠工具简介](#1.1 飞鼠工具简介)
- [1.2 飞鼠工具官网](#1.2 飞鼠工具官网)
- 二、本次实践介绍
-
- [2.1 本次实践场景描述](#2.1 本次实践场景描述)
- [2.2 本次实践前提](#2.2 本次实践前提)
- [2.3 本次实践环境规划](#2.3 本次实践环境规划)
- 三、检查本地k8s集群环境
-
- [3.1 检查k8s各节点状态](#3.1 检查k8s各节点状态)
- [3.2 检查k8s版本](#3.2 检查k8s版本)
- [3.3 检查k8s系统pod状态](#3.3 检查k8s系统pod状态)
- 四、本地部署wordpress服务
-
- [4.1 创建部署目录](#4.1 创建部署目录)
- [4.2 创建密码文件](#4.2 创建密码文件)
- [4.3 创建命名空间](#4.3 创建命名空间)
- [4.4 创建secret资源对象](#4.4 创建secret资源对象)
- [4.5 查看secret资源对象状态](#4.5 查看secret资源对象状态)
- [4.6 编辑wordpress.yaml文件](#4.6 编辑wordpress.yaml文件)
- [4.7 部署wordpress服务](#4.7 部署wordpress服务)
- [4.8 检查pod状态](#4.8 检查pod状态)
- [4.9 查看service状态](#4.9 查看service状态)
- 五、本地访问wordpres服务
-
- [5.1 wordpres初始化配置](#5.1 wordpres初始化配置)
- [5.2 设置站点信息](#5.2 设置站点信息)
- [5.3 初始化完成](#5.3 初始化完成)
- [5.4 访问wordpress前台首页](#5.4 访问wordpress前台首页)
- 六、飞鼠中心控制器节点后台设置工作
-
- [6.1 创建区域](#6.1 创建区域)
- [6.2 添加用户](#6.2 添加用户)
- [6.3 下载客户端配置文件](#6.3 下载客户端配置文件)
- 七、外部客户端安装wireguard
-
- [7.1 登录外部客户端](#7.1 登录外部客户端)
- [7.2 下载wireguard软件](#7.2 下载wireguard软件)
- [7.3 运行wireguard](#7.3 运行wireguard)
- [7.4 导入配置文件](#7.4 导入配置文件)
- [7.5 连接隧道](#7.5 连接隧道)
- [7.6 查看VPN连接状态](#7.6 查看VPN连接状态)
- 八、外部客户端访问wordpress相关服务
-
- [8.1 外部客户端访问VPC内网IP](#8.1 外部客户端访问VPC内网IP)
- [8.2 远程连接中心控制器节点服务器](#8.2 远程连接中心控制器节点服务器)
- [8.3 访问k8s的wordpress的数据库服务](#8.3 访问k8s的wordpress的数据库服务)
- [8.4 访问wordpress网站服务](#8.4 访问wordpress网站服务)
一、飞鼠异地组网工具介绍
1.1 飞鼠工具简介
飞鼠异地组网工具是一款能够突破地域限制、实现高效异地组网的强大工具。它采用标准的OSPF路由协议,具备跨平台兼容性,可以应对大批量数据中心之间的异地组网需求。
1.2 飞鼠工具官网
飞鼠官方网站:https://www.feishuwg.com/
二、本次实践介绍
2.1 本次实践场景描述
1.本次实践的两个局域网为本地局域网和阿里云VPC专有网络;
2.其中阿里云服务器为中心控制器节点服务器,本地局域网部署子网节点服务器;
3.本地局域网部署k8s单master集群环境,k8s部署wordpress服务;
4.在华为云开通一台ECS弹性云服务器模拟外部外部出差员工,可以访问内网的wordpress网站服务及访问wordpress数据库。
2.2 本次实践前提
- 本次实践前提为已经搭建好飞鼠异地组网的初步环境。
- 参考博文:飞鼠异地组网工具基本使用教程
- 本地局域网环境已经提前部署好k8s单master集群环境。
- 需要提前在华为云或其他云厂商购买一台云服务器模拟外部客户端。
2.3 本次实践环境规划
- 本次实践环境
hostname | IP地址 | 操作系统版本 | 服务器类别 | 角色 | 备注 |
---|---|---|---|---|---|
cloud | 内网IP:172.22.48.72、公网IP:120.79.233.45 | ubuntu22.04 | 阿里云服务器 | 中心控制器(master) | 阿里云VPC专有网络:172.22.48.0/24 |
jeven | 192.168.3.246 | ubuntu22.04 | 本地服务器 | 子网节点 | 本地局域网:192.168.3.0/24 |
mywin10 | 192.168.3.168 | win10 | ------ | 本地客户端 | 192.168.3.0/24 |
ecs-e238 | 192.168.0.168 | Windows Server2012 R2 | ------ | 外部客户端 | 华为云VPC虚拟私有云:192.168.0.0/24 |
- 本地局域网k8s环境
hostname | IP地址 | 操作系统版本 | k8s版本 | 角色 |
---|---|---|---|---|
k8s-master | 192.168.3.201 | centos7.6 | v1.27.4 | master节点 |
k8s-node01 | 192.168.3.202 | centos7.6 | v1.27.4 | worker节点 |
k8s-node02 | 192.168.3.203 | centos7.6 | v1.27.4 | worker节点 |
三、检查本地k8s集群环境
3.1 检查k8s各节点状态
检查k8s各节点状态,确保k8s集群各节点状态正常。
bash
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 108d v1.27.4
k8s-node01 Ready <none> 108d v1.27.4
k8s-node02 Ready <none> 108d v1.27.4
3.2 检查k8s版本
查看k8s的版本,注意部署应用时兼容的k8s版本。
bash
[root@k8s-master ~]# kubectl version --short
Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
Client Version: v1.27.4
Kustomize Version: v5.0.1
Server Version: v1.27.4
3.3 检查k8s系统pod状态
检查k8s集群的系统pod状态,确保所有系统pod运行正常。
bash
[root@k8s-master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-85578c44bf-rgxkx 1/1 Running 5 (14m ago) 5d23h
calico-node-8tts7 1/1 Running 10 (14m ago) 108d
calico-node-fx8mv 1/1 Running 10 (14m ago) 108d
calico-node-n8rt4 1/1 Running 11 (14m ago) 108d
coredns-7bdc4cb885-88qng 1/1 Running 3 (14m ago) 5d23h
coredns-7bdc4cb885-brdhk 1/1 Running 3 (14m ago) 5d23h
etcd-k8s-master 1/1 Running 11 (14m ago) 108d
kube-apiserver-k8s-master 1/1 Running 11 (14m ago) 108d
kube-controller-manager-k8s-master 1/1 Running 15 (14m ago) 108d
kube-proxy-6vvw5 1/1 Running 10 (14m ago) 108d
kube-proxy-867jg 1/1 Running 10 (14m ago) 108d
kube-proxy-lgsc8 1/1 Running 10 (14m ago) 108d
kube-scheduler-k8s-master 1/1 Running 14 (14m ago) 108d
四、本地部署wordpress服务
4.1 创建部署目录
创建wordpress应用的目录,使用以下命令创建 /data/wordpress 。
bash
mkdir -p /data/wordpress && cd /data/wordpress
4.2 创建密码文件
使用以下命令,创建存放账号和密码的mysql_pw.txt文件。
bash
cat << EOF > mysql_pw.txt
username=wordpress
password=wordpress
EOF
4.3 创建命名空间
创建命名空间wordpress
bash
kubectl create namespace wordpress
4.4 创建secret资源对象
创建secret资源对象mysecret
bash
kubectl --namespace=wordpress create secret generic mysecret --from-env-file=./mysql_pw.txt
4.5 查看secret资源对象状态
查看secret资源对象mysecret当前状态
bash
[root@k8s-master wordpress]# kubectl get secrets -n wordpress
NAME TYPE DATA AGE
mysecret Opaque 2 14s
4.6 编辑wordpress.yaml文件
编辑wordpress.yaml部署文件,内容如下:
yaml
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
namespace: wordpress
labels:
app: wordpress
spec:
ports:
- protocol: TCP
targetPort: 80
port: 80
nodePort: 30020
selector:
app: wordpress
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
namespace: wordpress
labels:
app: wordpress
spec:
replicas: 2
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
value: 10.96.0.100
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
volumeMounts:
- mountPath: "/var/www/html"
name: wordpress-data
volumes:
- name: wordpress-data
hostPath:
path: /data/wordpress/data
---
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
namespace: wordpress
labels:
app: wordpress
spec:
ports:
- port: 3306
type: ClusterIP
clusterIP: 10.96.0.100
selector:
app: wordpress
tier: mysql
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: wordpress-mysql
namespace: wordpress
labels:
app: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
tier: mysql
serviceName: "wordpress-mysql"
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node01
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- mountPath: /var/lib/mysql
name: mysql-storage
volumes:
- name: mysql-storage
hostPath:
path: /var/lib/mysql
4.7 部署wordpress服务
执行wordpress.yaml文件,开始部署wordpress应用。
bash
[root@k8s-master wordpress]# kubectl apply -f wordpress.yaml
service/wordpress created
deployment.apps/wordpress created
service/wordpress-mysql created
statefulset.apps/wordpress-mysql created
4.8 检查pod状态
在wordpress命名空间下,查看wordpress服务的pod状态,确保所有pod都正常启动。
bash
[root@k8s-master wordpress]# kubectl get pods -n wordpress
NAME READY STATUS RESTARTS AGE
wordpress-7c68d9b7b6-g64s5 1/1 Running 0 2m12s
wordpress-7c68d9b7b6-zsgdg 1/1 Running 0 2m12s
wordpress-mysql-0 1/1 Running 0 2m12s
4.9 查看service状态
在wordpress命名空间下,查看wordpress服务的service状态,可以看到对外映射的访问端口为30020。
bash
[root@k8s-master wordpress]# kubectl get service -n wordpress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress NodePort 10.110.180.202 <none> 80:30020/TCP 3m14s
wordpress-mysql ClusterIP 10.96.0.100 <none> 3306/TCP 3m14s
五、本地访问wordpres服务
5.1 wordpres初始化配置
访问地址:http://192.168.3.202:30020/,将IP替换为自己工作节点IP地址,进入 wordpres初始化配置界面,设置系统语言为简体中文。
5.2 设置站点信息
设置站点名称、用户名、密码、邮箱等信息,自定义设置即可。
5.3 初始化完成
初始化完成后,点击"登录"。
输入刚才设置的用户名和密码,进入wordpress后台管理页面。
5.4 访问wordpress前台首页
访问地址:http://192.168.3.202:30020/,将IP替换为自己服务器IP地址,进入wordpress前台首页。
六、飞鼠中心控制器节点后台设置工作
6.1 创建区域
在中心控制器节点的管理后台,区域管理------创建区域。
名字:自定义,这里填写my-k8s;
网络协议:FS-NAT,无限制访问;
选择端口:50030;
对外网络地址:选择公网IP地址,这里是中心控制器节点所在的公网IP地址;
网卡名称:选择本地网卡eth0;
允许网络:192.168.0.0/24,192.168.3.0/24,172.22.48.0/24,填写需要连接的局域网网络。
其余默认即可,选择"创建"。
6.2 添加用户
区域管理------新建的区域(my-k8s)------客户端管理,选择"添加用户"。
用户名:jeven;
Email地址:jeven@qq.com;
客户端IP:默认10.5.0.2/32;
保存即可。
6.3 下载客户端配置文件
点击下载,下载jeven.conf配置文件。
七、外部客户端安装wireguard
7.1 登录外部客户端
提前准备好一台华为云服务器或者其他云服务器,操作系统为windows即可,这里使用的是Windows Server2012 R2版本,使用远程桌面连接云服务器。
7.2 下载wireguard软件
下载地址:https://github.com/xingkongwangbin/feishuwg/releases/tag/1.0,打开下载地址,下载wireguard软件。
7.3 运行wireguard
将下载的wireguard安装包,在外部客户端直接运行即可。
7.4 导入配置文件
将之前下载的jeven.conf配置文件,导入到wireguard中。
7.5 连接隧道
在wireguard中,点击连接,可以看到处于已连接状态。
7.6 查看VPN连接状态
在my-k8s区域中,状态查看页面,可以看到VPN连接状态显示小绿灯,表示连接处于正常状态。
八、外部客户端访问wordpress相关服务
8.1 外部客户端访问VPC内网IP
外部客户端访问中心控制器节点的内网IP地址172.22.48.72,可以正常ping通。
8.2 远程连接中心控制器节点服务器
外部客户端远程连接中心控制器节点服务器
bash
ssh root@172.22.48.72
8.3 访问k8s的wordpress的数据库服务
在master节点,远程访问子网节点服务器。如果k8s部署在中心控制器节点内网环境,则可以直接访问k8s映射的服务,无需在跳转到子网节点进行跳转连接。
bash
ssh root@192.168.3.246
ssh远程连接k8s-master节点
bash
ssh root@192.168.3.201
查看k8s的wordpress的数据库服务地址
bash
[root@k8s-master ~]# kubectl get service -n wordpress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress NodePort 10.110.180.202 <none> 80:30020/TCP 14h
wordpress-mysql ClusterIP 10.96.0.100 <none> 3306/TCP 14h
访问k8s的wordpress的数据库服务
bash
kubectl exec -it -n wordpress wordpress-mysql-0 -- /bin/bash
查询wordpress数据表
sql
mysql> use wordpress;
Database changed
mysql> show tables;
+-----------------------+
| Tables_in_wordpress |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
12 rows in set (0.00 sec)
mysql>
8.4 访问wordpress网站服务
在外部客户端,通过以上方法连接到子网节点服务器后,可以直接links访问wordpress服务:http://192.168.3.202:30020,也可以自行安装火狐进行浏览器访问。
bash
links http://192.168.3.202:30020