Skip to Content

上下文

上下文用于与不同的 Nanocl 守护进程通信。

例如,本地计算机和远程服务器各有一个 Nanocl 守护进程,你可以通过上下文在它们之间切换。

需要让守护进程能够从互联网访问。方法有多种,最简单的是使用 ProxyRule。

首先生成自己的 SSL/TLS 证书。
证书确保只有持有由 CA 签发的特定证书的客户端才能访问守护进程。
这是必要的安全措施。

我们提供了一个 Statefile,自动生成所需证书并配置 ProxyRule。

自动配置

应用以下 Statefile,生成证书并应用 ProxyRule:

nanocl state apply -fs nr.next-hat.com/v0.18/remote-nanocld

应用 Statefile 后,可以创建上下文,在不同守护进程之间切换。先获取 Statefile 生成的客户端证书。

运行以下命令获取客户端证书:

nanocl secret inspect cert.client.nanocl.io

命令会输出客户端证书和密钥。

手动配置

生成证书

使用以下命令生成证书:

openssl req -x509 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 365 -nodes -subj "/CN=NanoclCA" openssl req -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj "/CN=*" openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 openssl req -newkey rsa:4096 -keyout client.key -out client.csr -nodes -subj "/CN=NanoclClient" openssl x509 -req -in client.csr -out client.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 365

将证书移到运行 Nanocl 的远程服务器的正确位置:

sudo mkdir -p /var/lib/nanocl/proxy/certs sudo mv ca.crt /var/lib/nanocl/proxy/certs/nanocl_ca.crt sudo mv server.crt /var/lib/nanocl/proxy/certs/nanocl_server.crt sudo mv server.key /var/lib/nanocl/proxy/certs/nanocl_server.key

应用 ProxyRule

接着应用 ProxyRule,将守护进程开放到互联网。

创建 nanocld-proxy.yml 文件:

ApiVersion: v0.18 # See all options: # https://docs.next-hat.com/references/nanocl/objects/resource Resources: - Name: tcp-9943.daemon.nanocl.io Kind: ncproxy.io/rule Data: Rules: - Protocol: Tcp Port: 9943 Network: All Ssl: Certificate: /var/lib/nanocl/proxy/certs/nanocl_server.crt CertificateKey: /var/lib/nanocl/proxy/certs/nanocl_server.key CertificateClient: /var/lib/nanocl/proxy/certs/nanocl_ca.crt VerifyClient: true Target: UnixPath: /run/nanocl/nanocl.sock

执行以下命令应用 ProxyRule:

nanocl apply -s nanocld-proxy.yml

创建上下文

将客户端证书移到本地计算机的正确位置:

mkdir -p ~/.nanocl/certs mv client.crt ~/.nanocl/certs/nanocl_client.crt mv client.key ~/.nanocl/certs/nanocl_client.key

最后,创建上下文以切换不同守护进程。

创建 my-secure-context.yml 文件:

Name: my-secure-context MetaData: Description: Secure connection to my remote server Endpoints: Nanocl: Host: https://my-remote-server:9943 Ssl: Cert: /home/my-user/.nanocl/certs/nanocl_client.crt CertKey: /home/my-user/.nanocl/certs/nanocl_client.key
📝

将 my-remote-server 替换为远程服务器真实的 IP 地址或域名。
将 my-user 替换为实际用户名。

通过以下命令导入上下文:

nanocl context from my-secure-context.yml

使用以下命令切换上下文:

nanocl context use my-secure-context

也可以列出现有上下文:

nanocl context list

更通用的操作命令是:

nanocl context --help

查看上下文命令的更多信息。

最后更新于