Tailscale容器管理虚拟机

在OCI Free Tier上部署基于Tailscale零信任网络的ARM虚拟机,通过Portainer CE提供容器管理服务。

  • by djmoore711
  • HCL
  • 本地部署
  • 更新于
在 GitHub 查看 djmoore711/oraclecloud-portainer-free-tier-terraform

使用说明

适用于Tailscale+Portainer的OCI免费层虚拟机

前提条件

  • OCI CLI配置在~/.OCI/config(默认配置文件或设置var OCI_config文件)
  • 来自管理控制台的Tailscale身份验证密钥

布局

. ├── terraform.tf ├── providers.tf ├── variables.tf ├── 网络.tf ├── compute.tf ├── 输出.f ├── terraform.tfvars示例 └── 模板/ └── 云探测器

跑

地形模板检查 地形初始化 地形验证 地形平面图 地形适用

访问

  • 应用后,等待云初始化: cloud-init status --wait
  • 检查: tailscale status
  • 入口: https://<tailnet-name-or-ip>:9443 (到达尾标)

概述

提供一个只能通过Tailscale访问的OCI免费层ARM VM(A1.Flex)(零信任)。Cloud init引导Tailscale、Docker和Portainer CE(LTS)。只有当有较新的LTS映像可用时,夜间作业才会刷新Portainer。OCI中没有公开入口规则;SSH访问是通过Tailscale SSH进行的。

建筑

  • VCN:10.0.0.0/16,公用子网10.0.1.0/24
  • 互联网网关+路由表:出口到互联网进行软件包安装和Docker拉取
  • 安全列表:允许所有人离开;无入口规则(仅通过Tailscale访问)
  • 计算:Ubuntu 22.04开启 VM.Standard.A1.Flex 默认配备1个OCPU和6GB RAM
  • 云初始化:安装Tailscale+Docker,启动Portainer CE LTS,配置无人值守升级和夜间刷新脚本

零信任模型

  • 未创建OCI入口安全规则
  • Tailscale提供安全访问和SSH(tailscaled + tailscale up --ssh)
  • Portainer可通过9443上的Tailscale IP或MagicDNS名称访问

这部署了什么

  • VCN、路由表、互联网网关、安全列表、子网
  • 具有用于出站连接的公共IP分配的单个计算实例
  • 云初始化:
    • 安装Tailscale并使用您的身份验证密钥启动节点
    • 安装Docker并启用服务
    • 使用持久Docker卷运行Portainer CE(LTS)
    • 设置05:00自动重启窗口的无人值守安全升级(美国/芝加哥)
    • 安排每天04:10的检查,仅在图像发生更改时刷新Portainer

变量

看 variables.tf 和 terraform.tfvars.example 默认值和示例。

关于配置文件的说明
以下值在这些文件之间可以互换使用:

  • terraform.tfvars 或 secret.auto.tfvars (由Terraform使用)

更新这些值时,请确保它们在两个位置都匹配:

  • COMPARTMENT_OCID ↔ compartment_ocid
  • TAILSCALE_AUTH_KEY ↔ tailscale_auth_key
  • PROFILE ↔ oci_config_profile
  • REGION (用于脚本,映射到Terraform中的OCI提供者区域)
  • oci_config_profile (string):中的OCI CLI/SDK配置文件 ~/.oci/config (默认值: DEFAULT)
  • compartment_ocid (字符串,必填):目标隔间OCID
  • instance_display_name (string):实例名称(默认值: mcp-host)
  • instance_shape (字符串):形状(默认值: VM.Standard.A1.Flex)
  • ocpus (数字):A1 Flex的OCPU(默认值: 1)
  • memory_in_gbs (数字):A1 Flex的RAM(默认值: 6)
  • tailscale_auth_key (字符串,敏感,必填):Tailscale身份验证密钥
  • image_ocid_override (string | null):固定一个特定的Ubuntu镜像OCID(默认值: null)
  • ad_index (数字):可用性域索引(从0开始,默认值: 0)

设置

  1. 确保您的OCI CLI配置在 ~/.oci/config 您的个人资料可用。
  2. 在Tailscale Admin中创建可重用的身份验证密钥(临时或可重用,如果需要,启用SSH)。
  3. 复制和编辑变量:
    • cp terraform.tfvars.example terraform.tfvars
    • 填充 compartment_ocid 和 tailscale_auth_key。可选择调整形状/AD。

用法

Terraform工作流

terraform fmt -check
terraform init
terraform validate
terraform plan
terraform apply

输出包括实例的公共/私有IP(注意:通过Tailscale访问)和一条简短的提示,提醒在哪里可以访问Portainer。

访问主机和门户

  • 等待云初始化在首次启动时完成: cloud-init status --wait
  • 在Tailscale Admin中或从其他节点验证节点是否存在: tailscale status
  • SSH(通过Tailscale SSH): ssh ubuntu@<tailscale-ip-or-name>
  • 门户用户界面: https://<tailscale-ip-or-name>:9443

首次访问时进行初始Portainer管理员设置。数据保存在 portainer_data Docker卷。

成本和限制

  • 设计用于适应OCI免费等级 VM.Standard.A1.Flex 配备1个OCPU/6GB RAM。您的租赁配额和区域可用性可能会有所不同。
  • 根据使用情况,出站出口可能会产生带宽成本。

清理

要销毁此模块创建的所有资源,请执行以下操作:

terraform destroy

故障排除

  • 尾秤未连接:检查 sudo journalctl -u tailscaled -f 并重新运行 tailscale up 如果需要的话。
  • 云初始化日志: /var/log/cloud-init.log 和 /var/log/cloud-init-output.log.
  • Portainer容器日志: docker logs -f portainer.
  • 夜间刷新输出: /var/log/portainer-refresh.log.

安全说明

  • 未配置安全列表入口规则;访问权限仅限于Tailscale。
  • 云初始化中启用了Tailscale SSH;通过Tailscale ACL和关键策略管理访问。
  • 无人值守的安全更新是通过05:00的重新启动窗口启用的(美国/芝加哥)。如果需要,调整模板中的时区/cron。