• 飞鼠异地组网工具实战之访问k8s集群内部服务


    一、飞鼠异地组网工具介绍

    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 本次实践前提

    1. 本次实践前提为已经搭建好飞鼠异地组网的初步环境。
    1. 本地局域网环境已经提前部署好k8s单master集群环境。
    2. 需要提前在华为云或其他云厂商购买一台云服务器模拟外部客户端。

    2.3 本次实践环境规划

    • 本次实践环境
    hostnameIP地址操作系统版本服务器类别角色备注
    cloud内网IP:172.22.48.72、公网IP:120.79.233.45ubuntu22.04阿里云服务器中心控制器(master)阿里云VPC专有网络:172.22.48.0/24
    jeven192.168.3.246ubuntu22.04本地服务器子网节点本地局域网:192.168.3.0/24
    mywin10192.168.3.168win10——本地客户端192.168.3.0/24
    ecs-e238192.168.0.168Windows Server2012 R2——外部客户端华为云VPC虚拟私有云:192.168.0.0/24
    • 本地局域网k8s环境
    hostnameIP地址操作系统版本k8s版本角色
    k8s-master192.168.3.201centos7.6v1.27.4master节点
    k8s-node01192.168.3.202centos7.6v1.27.4worker节点
    k8s-node02192.168.3.203centos7.6v1.27.4worker节点

    三、检查本地k8s集群环境

    3.1 检查k8s各节点状态

    检查k8s各节点状态,确保k8s集群各节点状态正常。

    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.2 检查k8s版本

    查看k8s的版本,注意部署应用时兼容的k8s版本。

    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.3 检查k8s系统pod状态

    检查k8s集群的系统pod状态,确保所有系统pod运行正常。

    [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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    四、本地部署wordpress服务

    4.1 创建部署目录

    创建wordpress应用的目录,使用以下命令创建 /data/wordpress 。

    mkdir -p /data/wordpress  &&  cd /data/wordpress
    
    • 1

    4.2 创建密码文件

    使用以下命令,创建存放账号和密码的mysql_pw.txt文件。

    cat << EOF > mysql_pw.txt
    username=wordpress
    password=wordpress
    EOF
    
    • 1
    • 2
    • 3
    • 4

    4.3 创建命名空间

    创建命名空间wordpress

    kubectl create namespace wordpress
    
    • 1

    4.4 创建secret资源对象

    创建secret资源对象mysecret

    kubectl --namespace=wordpress  create secret generic mysecret --from-env-file=./mysql_pw.txt
    
    • 1

    4.5 查看secret资源对象状态

    查看secret资源对象mysecret当前状态

    [root@k8s-master wordpress]#  kubectl get secrets -n wordpress
    NAME       TYPE     DATA   AGE
    mysecret   Opaque   2      14s
    
    • 1
    • 2
    • 3

    4.6 编辑wordpress.yaml文件

    编辑wordpress.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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140

    4.7 部署wordpress服务

    执行wordpress.yaml文件,开始部署wordpress应用。

    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.8 检查pod状态

    在wordpress命名空间下,查看wordpress服务的pod状态,确保所有pod都正常启动。

    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.9 查看service状态

    在wordpress命名空间下,查看wordpress服务的service状态,可以看到对外映射的访问端口为30020。

    [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
    
    • 1
    • 2
    • 3
    • 4

    五、本地访问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 远程连接中心控制器节点服务器

    外部客户端远程连接中心控制器节点服务器

    ssh  root@172.22.48.72
    
    • 1

    在这里插入图片描述

    8.3 访问k8s的wordpress的数据库服务

    在master节点,远程访问子网节点服务器。如果k8s部署在中心控制器节点内网环境,则可以直接访问k8s映射的服务,无需在跳转到子网节点进行跳转连接。

    ssh root@192.168.3.246
    
    • 1

    在这里插入图片描述

    ssh远程连接k8s-master节点

    ssh  root@192.168.3.201
    
    • 1

    在这里插入图片描述

    查看k8s的wordpress的数据库服务地址

    [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
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    访问k8s的wordpress的数据库服务

    kubectl exec -it -n wordpress wordpress-mysql-0 -- /bin/bash
    
    • 1

    在这里插入图片描述

    查询wordpress数据表

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    8.4 访问wordpress网站服务

    在外部客户端,通过以上方法连接到子网节点服务器后,可以直接links访问wordpress服务:http://192.168.3.202:30020,也可以自行安装火狐进行浏览器访问。

    links http://192.168.3.202:30020
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    【英语:语法基础】C6.日常对话-旅行专题
    计算机毕设(附源码)JAVA-SSM基于的防疫隔离服务系统
    Cadence OrCAD Capture 打印图纸的某一个部分的方法
    当zmq 和 docker 都要绑定一个端口时,怎么不修改端口号就能解决冲突?
    Linux下:文件与路径、用户管理、常用命令、vim
    【智能优化算法-麻雀搜索算法】基于萤火虫结合麻雀搜索算法求解单目标优化问题附matlab代码
    java专题训练(数字加密)
    CRM销售系统价格 一套CRM销售系统多少钱
    工信部:杭州亚运会开幕式首创 5G 超密组网方案,场馆网络无缝覆盖
    学习pytorch7 神经网络的基本骨架--nn,module的使用
  • 原文地址:https://blog.csdn.net/jks212454/article/details/134478651