操作场景
本文介绍如何通过云边 Tunnel 隧道,实现不同边缘地域的 Pod/Svc 互访(现在暂时仅支持7层 http/https 协议)。例如在南京地域的 Pod 可以成功访问北京地域的 Nginx 服务,反之亦然。
架构原理
![](https://qcloudimg.tencent-cloud.cn/image/document/a4f906792a662320d42ad3960fe154fe.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/a4f906792a662320d42ad3960fe154fe.png)
基本原理如上图所示,边缘节点 tunnel-edge 会和云端 tunnel-cloud 建立双向隧道,tunnel-edge 会在本地开放
:8080
端口作为 http/https 代理端口,如果边缘 Pod 需要通过代理访问其他地域的 Pod ip 或者 svc 的时候,可以在 Pod 内指定http_proxy
或者https_proxy
环境变量,把 http/https 流量通过 tunnel 转发到云端或者其他地域的边缘节点上。说明
在产品层面,平台通过 webhook 的方式,方便您指定代理:您可以设置 workload 中的 label
http-proxy=enable
来开启代理模式,此时 workload 相应的 Pod 会自动注入相应环境变量,例如 http_proxy=169.254.20.11:8080
。操作步骤
跨地域访问
1. 登录 容器服务控制台,选择左侧导航栏中的集群。
2. 在集群管理页,单击需要远程登录节点的集群 ID,进入该集群详情页。
3. 选择页面左侧组件管理,单击新建。
4. 在“新建组件”页中,选择 http-proxy-pod-webhook(跨地域服务互访)。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/9c542657459d668546fd9038d532322d.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/9c542657459d668546fd9038d532322d.png)
5. 单击完成。
6. 选择页面左侧工作负载 > Deployment,进入 Deployment 列表页面,分别新建名称为
nginx-nj
和 nginx-bj
的 deployment。1. 新建名称为 ![](https://qcloudimg.tencent-cloud.cn/image/document/88918a570c353a434cd308ed7c2f9c55.png)
nginx-nj
的 deployment,添加标签 http-proxy=enable
。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/88918a570c353a434cd308ed7c2f9c55.png)
2. 单击创建Workload。新建成功后返回 Deployment 列表查看。
3. 单击 ![](https://qcloudimg.tencent-cloud.cn/image/document/0e86559b955b368fbd6df93cadc77dff.png)
nginx-nj
右侧的更新调度策略。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/0e86559b955b368fbd6df93cadc77dff.png)
4. 在“更新调度策略”弹窗中,选择指定节点调度,并勾选对应地域下的节点,将 deployment 调度到南京地域的节点上。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/4226706f74e08bbcc7478d5fdfb67239.png)
对应地域下的节点可在节点列表中查看。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/3e1789784480c69a96cc932670a6a80b.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/4226706f74e08bbcc7478d5fdfb67239.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/3e1789784480c69a96cc932670a6a80b.png)
nginx-nj
的 yaml 如下:apiVersion: apps/v1kind: Deploymentmetadata:labels:k8s-app: nginx-njqcloud-app: nginx-njspec:...template:metadata:...labels:http-proxy: enable...spec:...
1. 新建名称为 ![](https://qcloudimg.tencent-cloud.cn/image/document/d74fa13b29eff5e6b688febf7632c9ce.png)
nginx-bj
的 deployment,添加标签 http-proxy=enable
。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/d74fa13b29eff5e6b688febf7632c9ce.png)
2. 单击创建Workload。新建成功后返回 Deployment 列表查看。
3. 单击 ![](https://qcloudimg.tencent-cloud.cn/image/document/048d99cc8704cff8e413cf8ef0854b35.png)
nginx-bj
右侧的更新调度策略。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/048d99cc8704cff8e413cf8ef0854b35.png)
4. 在“更新调度策略”弹窗中,选择指定节点调度,并勾选对应地域下的节点,将 deployment 调度到北京地域的节点上。对应地域下的节点可在节点列表中查看。
nginx-bj
的 yaml 如下:apiVersion: apps/v1kind: Deploymentmetadata:labels:k8s-app: nginx-bjqcloud-app: nginx-bjspec:...template:metadata:...labels:http-proxy: enable...spec:...
7. 分别远程登录 nginx-bj 的 Pod 和 nginx-nj 的 Pod 确认
env
的 name 属性值是否为 'http-proxy'。示例如下:apiVersion: v1kind: Podmetadata:...spec:...containers:- env:- name: http_proxyvalue: http://169.254.20.11:8080...
8. 远程登录南京边缘地域的 Pod 访问北京地域的服务。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/816e377af4664b98338f865ea14f2764.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/816e377af4664b98338f865ea14f2764.png)
9. 远程登录北京边缘地域的 Pod 访问南京地域的服务。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/043ec36d7f6a9b3fc92d4c1d20e35aa7.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/043ec36d7f6a9b3fc92d4c1d20e35aa7.png)