Docker 部署teleport
自建 CA 整体逻辑
完整流程:
1. 生成 Root CA 私钥
2. 生成 Root CA 证书(自签)
3. 服务端生成自己的私钥
4. 服务端生成 CSR(证书签名请求)
5. Root CA 给 CSR 签名
6. 得到服务端证书
7. 客户端信任 Root CA
8. TLS 验证通过
核心逻辑图
┌────────────────┐
│ Root CA 私钥 │
│ ca.key │
└──────┬─────────┘
│
│ 自签
▼
┌────────────────┐
│ Root CA 证书 │
│ ca.crt │
└──────┬─────────┘
│
给业务证书做数字签名
│
┌────────────┴────────────┐
▼ ▼
┌────────────────┐ ┌────────────────┐
│ server.key │ │ client.key │
│ 服务端私钥 │ │ 客户端私钥 │
└──────┬─────────┘ └──────┬─────────┘
│ CSR │ CSR
▼ ▼
┌────────────────┐ ┌────────────────┐
│ server.csr │ │ client.csr │
└──────┬─────────┘ └──────┬─────────┘
│ CA签名 │ CA签名
▼ ▼
┌────────────────┐ ┌────────────────┐
│ server.crt │ │ client.crt │
└────────────────┘ └────────────────┘
你自己的 OpenSSL CA
↓
给 Teleport Proxy/Auth 签 HTTPS 证书
↓
┌─────────────────────────┐
│ teleport-auth/proxy │
│ myteleport.com │
│ 192.168.219.60 │
└─────────────────────────┘
↓
Teleport 内置 CA
↓
自动签发 node TLS/SSH 证书
↓
┌─────────────────────────┐
│ node-1 │
│ node-2 │
└─────────────────────────┘
用 自签 TLS 证书 来让 Teleport 集群(Auth + Node)安全通信,而不是依赖默认的 Teleport 内置证书。下面我帮你整理一套完整方案,包括 CA 生成、证书签发、Teleport 配置。
1️⃣ 生成自签 CA
在 Teleport Auth 服务器上执行:
# 创建目录存放 CA
mkdir -p /etc/teleport/certs
cd /etc/teleport/certs
# 生成 CA 私钥
openssl genrsa -out ca.key 4096
# 生成 CA 证书
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt \\
-subj "/C=CN/ST=Beijing/L=Beijing/O=Teleport/OU=CA/CN=Teleport-CA"
2️⃣ 生成 Teleport Auth 证书
# 生成 Auth 服务器私钥
openssl genrsa -out auth.key 4096
# 生成 CSR(证书签名请求)
openssl req -new -key auth.key -out auth.csr \\
-subj "/C=CN/ST=Beijing/L=Beijing/O=Teleport/OU=Auth/CN=192.168.219.60"
# 用自签 CA 签发 Auth 证书
openssl x509 -req -in auth.csr -CA ca.crt -CAkey ca.key -CAcreateserial \\
-out auth.crt -days 365 -sha256
-
CN 要填写 Auth/Proxy 服务器 IP 或域名
-
auth.crt + auth.key 就是 Auth/Proxy TLS 使用的证书
单机 Docker 部署(推荐测试/学习)
1. 创建目录
mkdir -p /data/teleport/{config,data}
2. 生成配置文件
创建:
vim /data/teleport/config/teleport.yaml
内容:
version: v3
teleport:
nodename: rancher
data_dir: /var/lib/teleport
join_params:
token_name: ""
method: token
log:
output: stderr
severity: INFO
format:
output: text
ca_pin: ""
diag_addr: ""
auth_service:
enabled: "yes"
listen_addr: 0.0.0.0:3025
cluster_name: teleport.local
proxy_listener_mode: multiplex
ssh_service:
enabled: "no"
proxy_service:
enabled: "yes"
web_listen_addr: 0.0.0.0:3080
public_addr: 192.168.219.60:3080
https_keypairs: []
https_keypairs_reload_interval: 0s
acme: {}
1. 拉取镜像
docker pull public.ecr.aws/gravitational/teleport-distroless:18.7.2
2. 导出镜像
docker save -o teleport-18.7.2.tar \\
public.ecr.aws/gravitational/teleport-distroless:18.7.2
启动teleport
docker run -d –name teleport –hostname teleport –restart unless-stopped -p 3023:3023 -p 3024:3024 -p 3025:3025 -p 3080:3080 -v /data/teleport/config:/etc/teleport -v /data/teleport/data:/var/lib/teleport public.ecr.aws/gravitational/teleport-distroless:18.7.4
增加权限和用户
docker exec -it teleport tctl users add admin –roles=editor,access –logins=root,teleport
新增节点获取token 及ca
docker exec -it teleport tctl tokens add –type=node
[root@rancher ~]# docker exec -it teleport tctl tokens add –type=node
The invite token: ee46075285a7395cb3dff6eb2e97cb13
This token will expire in 30 minutes.
Run this on the new node to join the cluster:
> teleport start \\
–roles=node \\
–token=ee46075285a7395cb3dff6eb2e97cb13 \\
–ca-pin=sha256:1229810496693fcf634d6704d2a416933429cf3667f9516c8fc51a0bc42e4d2e \\
–auth-server=192.168.219.60:3080
安装agent节点
下载 Teleport 二进制:
wget https://cdn.teleport.dev/teleport-v18.7.4-linux-amd64-bin.tar.gz
tar -zxvf teleport-v18.7.4-linux-amd64-bin.tar.gz
cp teleport/teleport /usr/local/bin/
2.编辑配置文件
vim /etc/teleport.yaml
version: v3
teleport:
nodename: k8s
data_dir: /var/lib/teleport
auth_token: "c42198214357a139bac8bab5f6a70427"
auth_server: "192.168.219.60:3025"
ca_pin:
– "sha256:1229810496693fcf634d6704d2a416933429cf3667f9516c8fc51a0bc42e4d2e"
auth_service:
enabled: false
proxy_service:
enabled: false
ssh_service:
enabled: true
启动teleport agent
teleport start –config=/etc/teleport.yaml


