【绿联云NAS】内网架构搭建-基础环境搭建

内网环境搭建

  • 背景
  • 内网穿透
    • tailscale安装
      • 1、注册tailscale
      • 2、登陆
      • 3、docker部署
      • 4、获取ip
      • 5、关于重启
  • 远程SSH连接
  • 安装docker-compose
  • 安装k3d
    • 开始安装 k3d
      • 方法 1,你可以选择使用官方提供的脚本进行安装:
      • 方法 2,你也可以直接下载二进制文件,然后加入到 PATH 即可:https://github.com/k3d-io/k3d/releases
      • 创建一个 k3d.yml 文件
      • 创建一个 k3d 集群

背景

基于数据资产不断增加,黑群晖已经不满足要求,考虑到需求和环境故购置一台绿联云NAS,NAS中支持docker给内网环境提供了无限可能性。初步规划内网建设分成几个阶段:1、基础环境搭建;2、功能组件搭建;3、安全组件搭建;4、日志监控和运维

内网穿透

作为nas搭建环境,从实现的功能到日常的维护,对于远程连接的需求都是刚性的,所以第一步要做的就是做内网穿透。

由于是房东的房子,宽带的公网ip折腾起来成本太高所以之前黑群晖用的是zerotier,勉强可以用,网速慢且不稳定,且nas没有tun模块导致没办法安装zerotier,后来研究绿联云的时候看到很多人推荐tailscale,于是决定尝试一下,最后的结果却是很NICE,我从稳定性、网络状态、客户端兼容性和出现故障的概率和修复成本(健壮性)列出表格。

工具 稳定性 网速 兼容性 健壮性
zerotier
tailscale

tailscale安装

1、注册tailscale

网址在这里,基本上有手就行,tailscale官网,登陆或授权
【绿联云NAS】内网架构搭建-基础环境搭建_第1张图片

2、登陆

在你的设备(pc、mac、android、ios)上下载对应的客户端
【绿联云NAS】内网架构搭建-基础环境搭建_第2张图片
登陆就行,然后在浏览器打开网页版控制台,就这个网址 https://login.tailscale.com/admin/settings/keys生成一个key,复制它,你只有一次机会,后续就不再出现了
【绿联云NAS】内网架构搭建-基础环境搭建_第3张图片
选项中勾选标记的内容,具体功能看英文描述,Reusable打开可以让你的key在重启后也能再次使用,Ephemeral是因为网站的逻辑是上线一台设备之后给一个name,所以开启这个功能让他掉线之后自动删除该设备,tag打开后可以给设备分类标记方便管理,建议打开,在后面自动上线和开启subnets环境用到
【绿联云NAS】内网架构搭建-基础环境搭建_第4张图片

3、docker部署

这里有docker的官方介绍,有兴趣的可以瞅一眼。https://hub.docker.com/r/tailscale/tailscale,看不看都行
然后在你的docker仓库搜索 tailscale,下载它
【绿联云NAS】内网架构搭建-基础环境搭建_第5张图片
然后添加到容器,这里需要注意的的是有两个挂载路径,对应填上就行
/var/lib
/dev/net/tun
【绿联云NAS】内网架构搭建-基础环境搭建_第6张图片
环境需要加一个 TS_AUTH_KEY,把你在tailscale控制台获取的key粘贴在这里就行了
再加一个TS_ROUTES,后面就是你家路由器的局域网地址,后面的/24固定的,不用改

【绿联云NAS】内网架构搭建-基础环境搭建_第7张图片

4、获取ip

打开tailscale控制台 machines下面应该就能看到你新加入的设备了,记得打开subnet routes,这样无论内外访问都是相同的ip地址
【绿联云NAS】内网架构搭建-基础环境搭建_第8张图片

记得在这里修改过期限制,否则账号到期后就无法连接
【绿联云NAS】内网架构搭建-基础环境搭建_第9张图片
【绿联云NAS】内网架构搭建-基础环境搭建_第10张图片
此时你就可以访问内网了,但是想要作为代理节点访问其他服务需要打开这个subnets
【绿联云NAS】内网架构搭建-基础环境搭建_第11张图片
到这里这个docker容器相当于你在内网的一个网关可以实现代理访问你的内网了。

5、关于重启

测试后发现,每次重启都会导致节点变更,还需要手动开启subnet,后来查看官方文档后,可以进行一下额外配置。

首先在Acls里面添加这两个

添加tag
【绿联云NAS】内网架构搭建-基础环境搭建_第12张图片
设置autoApprovers

{
	"groups": {
		"group:owner": ["TDHypocrites@github"],
	},
	"acls": [
		{
			"action": "accept",
			"src":    ["group:owner", "*"],
			"dst":    ["*:*"],
		},
	],
	"tagOwners": {
		"tag:docker": ["TDHypocrites@github"],
	},
	"autoApprovers": {
		// Alice can create subnet routers advertising routes in 10.0.0.0/24 that are auto-approved
		"routes": {
			"10.0.0.0.0/24": ["tag:docker"],
		},
		// A device tagged security can advertise exit nodes that are auto-approved
		"exitNode": ["tag:docker"],
	},
}

需要注意的是 resuable、Ephemeral都需要打开,tag选你刚刚在acl配置的那个tag
Tags选择后,能通过autoApprovers,在设备回复上线后,自动配置subnet从而使用tailscale内网穿透访问你家内网所有设备

远程SSH连接

绿联云没有开放SSH的意思,但是可以通过远程协助的方式通过922端口获取密码登陆,目前分成两个版本。
1、V4.4.0.23.0711之前的系统版本可以通过密码拼接的方式获得root密码,绿联 DX4600 获取 SSH 权限
2、V4.4.0.23.0711之后系统版本可以通过计算的方式获取密码
【绿联云NAS】内网架构搭建-基础环境搭建_第13张图片
【绿联云NAS】内网架构搭建-基础环境搭建_第14张图片

安装docker-compose

绿联云本身不支持docker-compose,想要获得完整版的体验,必然是需要docker- compose的,所以第一步需要安装docker-compose,绿联云是基于openwrt开发,所以路径需要改一下,改到bin路径下

curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose

【绿联云NAS】内网架构搭建-基础环境搭建_第15张图片

安装k3d

一个完全的初学者在资源受限的环境中运行 k8s 集群,同事搭建完整的 k8s 套件很复杂于是可以考虑各种丐版 k8s 集群,各种丐版的 k8s 集群部署方案,比如:K3S、K3d、Kind、MicroK8S、Minikube、Docker Desktop。

经过网友研究,确认绿联云所属的openwrt系统可以支持k3d,所以确定k3d作为基础容器管理,在这个基础上搭建各类服务,比如 nexus oss、jenkins 等等。

开始安装 k3d

方法 1,你可以选择使用官方提供的脚本进行安装:

wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

方法 2,你也可以直接下载二进制文件,然后加入到 PATH 即可:https://github.com/k3d-io/k3d/releases

如果从 github 下载对你的网络来说是一种困难,你可以选择 k3d 或者 FastGithub

创建一个 k3d.yml 文件

k3d.yml 是用户在创建 k3d 集群时使用的配置文件。这是一个范例的配置文件:

apiVersion: k3d.io/v1alpha4
kind: Simple
metadata:
  name: k3s-default
servers: 1 # same as `--servers 1`
agents: 2 # same as `--agents 2`
image: docker.io/rancher/k3s:v1.25.6-k3s1
kubeAPI: # same as `--api-port myhost.my.domain:6445` (where the name would resolve to 127.0.0.1)
  host: '127.0.0.1' # important for the `server` setting in the kubeconfig
  # hostIP: "192.168.1.200" # where the Kubernetes API will be listening on
  hostPort: '6445' # where the Kubernetes API listening port will be mapped to on your host system
ports:
  - port: 80:80 # same as `--port '8080:80@loadbalancer'`
    nodeFilters:
      - loadbalancer
options:
  k3d: # k3d runtime settings
    wait: true # wait for cluster to be usable before returining; same as `--wait` (default: true)
    timeout: '60s' # wait timeout before aborting; same as `--timeout 60s`
    disableLoadbalancer: false # same as `--no-lb`
    disableImageVolume: false # same as `--no-image-volume`
    disableRollback: false # same as `--no-Rollback`
    loadbalancer:
      configOverrides:
        - settings.workerConnections=2048
  k3s: # options passed on to K3s itself
    extraArgs: # additional arguments passed to the `k3s server|agent` command; same as `--k3s-arg`
      - arg: '--tls-san=127.0.0.1 --tls-san=ks.newbe.io'
        nodeFilters:
          - server:*
  kubeconfig:
    updateDefaultKubeconfig: true # add new cluster to your default Kubeconfig; same as `--kubeconfig-update-default` (default: true)
    switchCurrentContext: true # also set current-context to the new cluster's context; same as `--kubeconfig-switch-context` (default: true)
registries: # define how registries should be created or used
  config:
    | # define contents of the `registries.yaml` file (or reference a file); same as `--registry-config /path/to/config.yaml`
    mirrors:
      "docker.io":
        endpoint:
          - "https://mirror.ccs.tencentyun.com"

创建一个 k3d 集群

有了配置文件,现在就可以创建一个 k3d 集群了:

k3d cluster create --config k3d.yml

运行结果大致如下:

root@OpenWrt:/mnt/sda1/workspace# ./k3d cluster create --config k3d.yml
INFO[0000] Using config file k3d.yml (k3d.io/v1alpha4#simple)
INFO[0000] portmapping '80:80' targets the loadbalancer: defaulting to [servers:*:proxy agents:*:proxy]
INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-k3s-default'
INFO[0000] Created image volume k3d-k3s-default-images
INFO[0000] Starting new tools node...
INFO[0000] Starting Node 'k3d-k3s-default-tools'
INFO[0001] Creating node 'k3d-k3s-default-server-0'
INFO[0001] Creating node 'k3d-k3s-default-agent-0'
INFO[0001] Creating node 'k3d-k3s-default-agent-1'
INFO[0001] Creating LoadBalancer 'k3d-k3s-default-serverlb'
INFO[0001] Using the k3d-tools node to gather environment information
INFO[0001] HostIP: using network gateway 172.18.0.1 address
INFO[0001] Starting cluster 'k3s-default'
INFO[0001] Starting servers...
INFO[0001] Starting Node 'k3d-k3s-default-server-0'
INFO[0006] Starting agents...
INFO[0007] Starting Node 'k3d-k3s-default-agent-0'
INFO[0007] Starting Node 'k3d-k3s-default-agent-1'
INFO[0010] Starting helpers...
INFO[0010] Starting Node 'k3d-k3s-default-serverlb'
INFO[0017] Injecting records for hostAliases (incl. host.k3d.internal) and for 4 network members into CoreDNS configmap...
INFO[0019] Cluster 'k3s-default' created successfully!
INFO[0019] You can now use it like this:
kubectl cluster-info

这样我们就得到了一个 k3d 集群,其中包含了一个 master 节点和两个 worker 节点。

获取 kubeconfig
k3d 集群创建成功后,我们可以通过 k3d 命令获取 kubeconfig 文件:

k3d kubeconfig get --all

将 kubeconfig 配置好,就可以使用 kubectl 命令操作 k3d 集群了。

kubectl get nodes
NAME                       STATUS   ROLES                  AGE   VERSION
k3d-k3s-default-server-0   Ready    control-plane,master   38m   v1.25.6+k3s1
k3d-k3s-default-agent-1    Ready    <none>                 38m   v1.25.6+k3s1
k3d-k3s-default-agent-0    Ready    <none>                 38m   v1.25.6+k3s1

你可能感兴趣的:(架构)