使用Azure AKS来将Kubernetes与本地网络通过OpenVPN(443/tcp)连接起来

首先

大家有使用 Kubernetes 吗?它是一个可爱的家伙,只需声明式地描述所需的容器组,而无需考虑服务器端的基础设施和网络配置,就能帮助我们构建服务器端。

由于搭建和维护Kubernetes本身非常繁琐,所以通常希望将Kubernetes交给云端来照顾,这是很正常的。

然而,世界上并不完全依赖云服务,有时也需要与本地系统和原始数据包进行交互。虽然大多数云服务都提供将本地网络和云虚拟网络通过VPN连接的解决方案,但根据需求可能并不总是适用。

比如说Azure的点到站点VPN只支持Windows和Mac的客户操作系统,其他的系统是无效的。

因此,我們將在Kubernetes (Azure AKS)上建立OpenVPN伺服器,並嘗試連接到本地網路(模擬的另一個網站的虛擬網路)。最終的結構將如下所示。

kubernetes-openvpn.png

验证环境

KubernetesクラスタバージョンAKSMicrosoft AKS 米国中部Kubernetes1.8.10
ローカルシステムバージョンクラウドMicrosoft Azure 東日本OSUbuntu 16.04 LTS
kubectl端末バージョンazure cli2.0.31kubectl1.10.0OSmacOS Sierra 10.12.6

AKS的启动

使用Azure CLI,在美国中央地区启动AKS。

请注意,要启动AKS,您需要具备创建Service Principal的权限。如果遇到403错误,请咨询Azure账户的管理员。

使用Azure CLI进行登录

mac:~$ az login

请在浏览器中访问 https://microsoft.com/devicelogin 并输入显示的密钥代码,以通过oauth2进行验证,然后验证Azure CLI。

创建一个用于AKS的资源组。

mac:~$ az group create --name aks --location centralus

我将在美国中央地区创建一个用于AKS的资源组。

AKS 启动

mac:~$ az aks create --resource-group aks --name aksCluster --node-count 1 --ssh-key-value $HOME/.ssh/azure.pub

在美国中央地区启动AKS。

配置kubectl。

mac:~$ az aks get-credentials --resource-group aks --name aksCluster

为了连接到启动的AKS,配置kubectl。

mac:~$ kubectl get nodes
NAME                       STATUS    ROLES     AGE       VERSION
aks-nodepool1-37708792-0   Ready     agent     16m       v1.8.10

如果节点列表中列出了名为aks-…的节点,那么就是连接到了AKS。

(选项)展示Kubernetes仪表板

mac:~$ az aks browse --resource-group aks --name aksCluster --disable-browser

当您在另一个控制台执行az aks browse命令时,将会建立与AKS管理器之间的隧道。当隧道打开时,您可以访问 http://127.0.0.1:8001/ 查看Kubernetes仪表板。

在Kubernetes上搭建OpenVPN服务器。

由于AKS已准备就绪,我们将在AKS的Kubernetes上构建一个在443/tcp端口上监听的OpenVPN服务器。

获取脚本文件

mac:~$ git clone https://github.com/nmatsui/kubernetes-openvpn.git
mac:~$ cd kubernetes-openvpn

获取在Kubernetes上部署OpenVPN服务器所需的脚本。

克隆的nmatsui/kubernetes-openvpn脚本和yaml基于kube-openvpn进行了修改,以在443/tcp上监听VPN。

PKI密钥生成

mac:kubernetes-openvpn$ docker run --user=$(id -u) -e OVPN_SERVER_URL=tcp://vpn.example.com:443 -v $PWD:/etc/openvpn:z -ti ptlange/openvpn ovpn_initpki
mac:kubernetes-openvpn$ docker run --user=$(id -u) -e EASYRSA_CRL_DAYS=180 -v $PWD:/etc/openvpn:z -ti ptlange/openvpn easyrsa gen-crl

使用kube-openvpn容器生成用于VPN连接的PKI密钥。虽然将不存在的域名vpn.example.com指定为FQDN,但最终该FQDN将在OpenVPN客户端的/etc/hosts中进行名称解析。

在Kubernetes上构建OpenVPN POD时,指定的FQDN也将用作标签名称。如果使用除vpn.example.com以外的FQDN,请一并更改testproxy-1.yaml和testproxy-2.yaml的选择器。

获取Kubernetes中服务网络和Pod网络的CIDR。

mac:kubernetes-openvpn$ kubectl cluster-info dump | grep "service-cluster-ip-range"
mac:kubernetes-openvpn$ kubectl cluster-info dump | grep "cluster-cidr"

OpenVPN可以将OpenVPN服务器的路由推送到客户端的路由表中。为此,需要获取Kubernetes的Service和Pod的CIDR。

然而在Azure AKS中,无法准确获取Service的CIDR(或许可以通过az aks之类的方式获取??)
从表面上看,Azure AKS似乎使用10.0.0.0/16来分配Service的IP地址,因此只需确保本地系统的虚拟网络CIDR不与之重叠,把全部10.0.0.0/8都交由Kubernetes即可解决问题,感觉没有什么大问题。

启动OpenVPN服务器

mac:kubernetes-openvpn$ ./kube-openvpn/deploy.sh default tcp://vpn.example.com:443 10.0.0.0/8 10.244.0.0/16

使用./kube-openvpn/deploy.sh在Kubernetes上启动OpenVPN服务器。在内部大致执行以下操作。

    • namespaceやFQDN、ポート、指定されたCIDRを元にOpenVPNの各種設定値を生成してconfigmapに設定

 

    • 生成したPKI鍵をsecretに登録

./kube-openvpn/deployment.yamlを用いてOpenVPN PODとServiceを起動

生成适用于OpenVPN客户端的配置文件。

mac:kubernetes-openvpn$ docker run --user=$(id -u) -v $PWD:/etc/openvpn:z -ti ptlange/openvpn easyrsa build-client-full client nopass
mac:kubernetes-openvpn$ docker run --user=$(id -u) -e OVPN_SERVER_URL=tcp://vpn.example.com:443 -v $PWD:/etc/openvpn:z --rm ptlange/openvpn ovpn_getclient client > client.ovpn

生成OpenVPN客户端连接到OpenVPN服务器时的配置文件,并且将其存储起来(稍后通过scp上传到用于验证的虚拟机)。

启动本地系统以进行连接验证。

由于在美国中央AKS上启动了OpenVPN服务器,接下来将在东日本地区启动模拟本地系统的虚拟网络和两个客户端虚拟机。

创建用于本地系统的资源组。

mac:~$ az group create --name client --location japaneast

我会在东日本地区创建一个用于本地系统的资源组。

创建用于本地系统的虚拟网络

    1. 创建vnet和subnet

创建vnet
mac:~$ az network create vnet –resource-group client –name client-vnet –address-prefix 192.168.0.0/16 –subnet-name public –subnet-prefix 192.168.0.0/24

为两个客户端创建两个公共IP

创建公共IP 1
mac:~$ az network public-ip create –resource-group client –name client-publicip-1 –dns-name client-1

创建公共IP 2
mac:~$ az network public-ip create –resource-group client –name client-publicip-2 –dns-name client-2

创建安全组

创建nsg
mac:~$ az network nsg create –resource-group client –name client-nsg

允许从kubectl终端进行SSH连接

添加入站规则
mac:~$ az network nsg rule create –resource-group client –nsg-name client-nsg –name AllowSSHInBound –protocol tcp –destination-port-range 22 –source-address-prefixes WWW.XXX.YYY.ZZZ/32 –access allow –priority 1000

创建分配了安全组和公共IP的两个虚拟网卡

创建网卡 1
mac:~$ az network nic create –resource-group client –name client-nic-1 –vnet-name client-vnet –subnet public –public-ip-address client-publicip-1 –network-security-group client-nsg

创建网卡 2
mac:~$ az network nic create –resource-group client –name client-nic-2 –vnet-name client-vnet –subnet public –public-ip-address client-publicip-2 –network-security-group client-nsg

为了避免与Kubernetes进行路由的CIDR(10.0.0.0/8)冲突,在虚拟网络192.168.0.0/16上建立了一个子网192.168.0.0/24。
此外,创建了一个允许来自互联网的SSH入站连接的安全组(根据默认规则,允许在虚拟网络内部进行发送和接收,以及从虚拟网络发送到互联网),并创建了一个分配了安全组和公共IP的虚拟网卡。

创建用于本地系统的可用性集合。

mac:~$ az vm availability-set create --resource-group client --name client-as

由于这次是一个验证,所以可用性集合并不是必需的,但我们还是会先创建一个。

启动两台客户端VM。

mac:~$ az vm create --resource-group client --name ubuntu-1 --location japaneast --availability-set client-as --nics client-nic-1 --image UbuntuLTS --size Standard_A1 --admin-username ubuntu --ssh-key-value $HOME/.ssh/azure.pub
mac:~$ az vm create --resource-group client --name ubuntu-2 --location japaneast --availability-set client-as --nics client-nic-2 --image UbuntuLTS --size Standard_A1 --admin-username ubuntu --ssh-key-value $HOME/.ssh/azure.pub

使用指定的虚拟网卡,启动两个Ubuntu 16.04 LTS的虚拟机。

通过VPN连接从本地系统到Kubernetes

现在我已经准备好了,接下来我将尝试从本地系统上的验证虚拟机(ubuntu-1)通过443/tcp端口连接到Kubernetes的VPN。

在ubuntu-1上使用SCP复制OpenVPN客户端的配置文件。

我将生成的 client.ovpn 配置文件通过SCP传输到 ubuntu-1 上的OpenVPN客户端。

验证OpenVPN服务的外部IP并进行名称解析

mac:kubernetes-openvpn$ kubectl get service -l openvpn=vpn.example.com
NAME      TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)         AGE
openvpn   LoadBalancer   10.0.206.64   WW.XX.YY.ZZ    443:32041/TCP   8m

确认在Kubernetes上启动的OpenVPN服务的外部IP,并确保可以通过在OpenVPN服务器构建时指定的vpn.example.com进行名称解析。暂时,我们将这个IP设置在ubuntu-1的/etc/hosts文件中。

ubuntu-1:~$ cat /etc/hosts
127.0.0.1 localhost
WW.XX.YY.ZZ vpn.example.com

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

确认从 ubuntu-1 到 Kubernetes 的VPN连接。

    1. 安装OpenVPN软件包

在Ubuntu上安装OpenVPN-1
ubuntu-1:~$ sudo apt update && sudo apt install openvpn -y

连接到Kubernetes的OpenVPN服务器
connect_openvpn
ubuntu-1:~$ sudo openvpn ./client.ovpn

2018年4月17日星期二 04:01:24 初始化序列已完成

连接到Kubernetes上的OpenVPN服务器。如果显示“Initialization Sequence Completed”,则表示连接成功。

请确认eth0和tun0的IP地址。

ubuntu-1:~$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0d:3a:50:85:26 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.4/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20d:3aff:fe50:8526/64 scope link
       valid_lft forever preferred_lft forever
ubuntu-1:~$ ip addr show dev tun0
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.140.0.2/24 brd 10.140.0.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::7821:bd24:7fde:a992/64 scope link flags 800
       valid_lft forever preferred_lft forever

打开与已连接VPN的控制台分开的另一个控制台,确认ubuntu-1的eth0(连接到本地系统虚拟网络的设备)的IP地址以及tun0(连接到通过OpenVPN创建的VPN隧道的设备)的IP地址。

这次,eth0被分配了192.168.0.4,而tun0被分配了10.140.0.2。

确认路由表

ubuntu-1:~$ ip route show
default via 192.168.0.1 dev eth0
10.0.0.0/8 via 10.140.0.1 dev tun0
10.140.0.0/24 dev tun0  proto kernel  scope link  src 10.140.0.2
10.244.0.0/16 via 10.140.0.1 dev tun0
168.63.129.16 via 192.168.0.1 dev eth0
169.254.169.254 via 192.168.0.1 dev eth0
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.4

我也会检查路由表。我可以確認當OpenVPN服务器启动时,通过tun0可以将10.0.0.0/8和10.244.0.0/16指定的IP地址路由到10.140.0.1上(10.140.0.1是Kubernetes上的OpenVPN服务器VPN隧道出口的IP地址)。

暂停VPN连接

使用Ctrl-C停止OpenVPN客户端的连接,并且暂时解除VPN连接。

连接验证

到目前为止,我们已经确认了在Kubernetes上的OpenVPN服务器与本地系统通过OpenVPN进行了网络连接。然而,仅仅这样还不够有趣,我们现在来实际尝试一下,从本地系统访问Kubernetes的HTTP服务,并且反过来从Kubernetes上的POD连接到本地系统的HTTP守护进程。

启动用于验证的POD和服务,并重新连接VPN到Kubernetes端。

向OpenVPN服务器添加到本地系统的NAT配置。

    1. 打开OpenVPN客户端配置

add_ccd
mac:kubernetes-openvpn$ kubectl编辑configmap openvpn-ccd

差异
— /tmp/openvpn-ccd.org 2018-04-17 13:23:32.000000000 +0900
+++ /tmp/openvpn-ccd 2018-04-17 13:24:14.000000000 +0900
@@ -5,6 +5,7 @@
apiVersion: v1
data:
example: ifconfig-push 10.140.0.5 255.255.255.0
+ ubuntu-1: ifconfig-push 10.140.0.2 255.255.255.0
kind: ConfigMap
metadata:
annotations:

配置OpenVPN客户端的端口映射

add_portmapping
mac:kubernetes-openvpn$ kubectl编辑configmap openvpn-portmapping

差异
— /tmp/openvpn-portmapping.org 2018-04-17 13:28:40.000000000 +0900
+++ /tmp/openvpn-portmapping 2018-04-17 13:29:10.000000000 +0900
@@ -5,6 +5,8 @@
apiVersion: v1
data:
“20080”: example:80
+ “8081”: ubuntu-1:8081
+ “8082”: ubuntu-1:8082
kind: ConfigMap
metadata:
annotations:

在Kubernetes上的OpenVPN中添加NAT配置(可以通过configmap进行配置)。

到达 OpenVPN 服务器的 8081 和 8082 端口的数据包将通过 VPN 通道转发到相应的本地系统 Ubuntu-1 的 tun0 IP 地址 10.140.0.2 上的对应端口。

在Kubernetes上启动OpenVPN服务器的ProxyService。

mac:kubernetes-openvpn$ kubectl apply -f testproxy-1.yaml
mac:kubernetes-openvpn$ kubectl apply -f testproxy-2.yaml

由于Kubernetes的设计特点,OpenVPN服务器的POD与其他POD并不能直接通信,而是通过连接到OpenVPN服务器的服务与其他POD进行通信。因此,需要启动一个监听8081(或8082)端口的服务与OpenVPN服务器的POD建立连接。

apiVersion: v1
kind: Service
metadata:
  name: testproxy-1
  labels:
    app: testproxy-1
spec:
  type: ClusterIP
  selector:
    openvpn: vpn.example.com
  ports:
  - port: 8081
    targetPort: 8081

在Kubernetes上启动用于验证的HTTP服务。

mac:kubernetes-openvpn$ kubectl apply -f testservice.yaml

为了对Kubernetes进行本地系统到达验证,我将在Kubernetes上的端口3000上启动一个用于验证的服务,该服务无论访问哪个路径都会返回{“message”:”hello world!”}这个JSON。

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: testserver
spec:
  replicas: 1
  selector:
    matchLabels:
      app: testserver
  template:
    metadata:
      labels:
        app: testserver
    spec:
      containers:
      - name: testserver
        image: nmatsui/hello-world-api:latest
        ports:
        - containerPort: 3000
          name: testserver
---
apiVersion: v1
kind: Service
metadata:
  name: testservice
  labels:
    app: testservice
spec:
  type: ClusterIP
  selector:
    app: testserver
  ports:
  - port: 3000

我会在Kubernetes中确认这个testservice的内部IP地址。

mac:kubernetes-openvpn$ kubectl get services -l app=testservice

NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
testservice   ClusterIP   10.0.19.96   <none>        3000/TCP   24m

这次给分配了10.0.19.96。

用Ubuntu-1重新开始VPN连接。

ubuntu-1:~$ sudo openvpn ./client.ovpn

我将在 ubuntu-1 上重新启动 VPN 连接。通过重新连接,我们可以将在 configmap 中设置的端口映射变得有效。

验证Ubuntu-1与Kubernetes的连接

那么,我们将确认Ubuntu-1和Kubernetes之间可以双向连接。

ubuntu-1在Kubernetes上验证测试服务的连通性。

ubuntu-1:~$ curl -i http://10.0.19.96:3000/
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 17 Apr 2018 04:47:19 GMT
Connection: keep-alive
Transfer-Encoding: chunked

{"message":"hello world!"}

我已经确认从本地系统ubuntu-1通过VPN隧道可以通过HTTP连接到Kubernetes的testservice的IP地址。

ubuntu-1=>testservice.png

在Kubernetes上的POD上,验证与ubuntu-1的HTTP守护进程的连接。

    1. 在ubuntu-1上准备index.html文件。

index.html文件内容如下:
ubuntu-1

在ubuntu-1上使用8081端口启动HTTP守护进程。

启动HTTP守护进程命令如下:
ubuntu-1:~$ python -m SimpleHTTPServer 8081

在Kubernetes上启动一个带有curl工具的POD。

启动POD命令如下:
mac:kubernetes-openvpn$ kubectl run testpod –rm -it –image=yauritux/busybox-curl

从POD访问testproxy的8081端口。

从POD访问testproxy的8081端口命令如下:
pod:~$ curl -i http://testproxy-1:8081/
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.12
Date: Tue, 17 Apr 2018 05:02:06 GMT
Content-type: text/html
Content-Length: 79
Last-Modified: Tue, 17 Apr 2018 04:57:22 GMT

ubuntu-1

确认从Kubernetes的POD经过OpenVPN服务器的NAT,可以通过HTTP连接到ubuntu-1上的HTTP守护程序。

testpod=>ubuntu-1.png

验证Ubuntu-2与Kubernetes的连接

最后,我们将通过在 ubuntu-1 上进行网络地址转换(NAT),以确保与 Kubernetes 直接连接的 ubuntu-2 和 Kubernetes 之间可以实现双向连接。

在Ubuntu-1上配置NAT

    1. 允许ubuntu-1的包转发

启用IP转发
ubuntu-1:〜$ sudo sysctl -w net.ipv4.ip_forward=1

ubuntu-1的eth0(192.168.0.4)的3000端口转发到Kubernetes的testservice的3000端口

从本地网络到testservice
ubuntu-1:〜$ sudo iptables -t nat -A PREROUTING -m tcp -p tcp –dst 192.168.0.4 –dport 3000 -j DNAT –to-destination 10.0.19.96:3000
ubuntu-1:〜$ sudo iptables -t nat -A POSTROUTING -m tcp -p tcp –dst 10.0.19.96 –dport 3000 -j SNAT –to-source 10.140.0.2

ubuntu-1的tun0(10.140.0.2)的8082端口转发到ubuntu-2的8082端口

从VPN到ubuntu-2
ubuntu-1:〜$ sudo iptables -t nat -A PREROUTING -m tcp -p tcp –dst 10.140.0.2 –dport 8082 -j DNAT –to-destination 192.168.0.5:8082
ubuntu-1:〜$ sudo iptables -t nat -A POSTROUTING -m tcp -p tcp –dst 192.168.0.5 –dport 8082 -j SNAT –to-source 192.168.0.4

检查NAT表

显示NAT
ubuntu-1:〜$ sudo iptables -L -t nat
Chain PREROUTING(策略ACCEPT)
target prot opt source destination
DNAT tcp — anywhere 192.168.0.4 tcp dpt:3000 to:10.0.19.96:3000
DNAT tcp — anywhere 10.140.0.2 tcp dpt:8082 to:192.168.0.5:8082

Chain INPUT(策略ACCEPT)
target prot opt source destination

Chain OUTPUT(策略ACCEPT)
target prot opt source destination

Chain POSTROUTING(策略ACCEPT)
target prot opt source destination
SNAT tcp — anywhere 10.0.19.96 tcp dpt:3000 to:10.140.0.2
SNAT tcp — anywhere 192.168.0.5 tcp dpt:8082 to:192.168.0.4

检查过滤表

本来はFORWARDフィルタも設定しなければなりませんが、AzureのVMはデフォルトのフィルタルールが全てACCEPTなので割愛します。

显示过滤器
ubuntu-1:〜$ sudo iptables -L -t filter
Chain INPUT(策略ACCEPT)
target prot opt source destination

Chain FORWARD(策略ACCEPT)
target prot opt source destination

Chain OUTPUT(策略ACCEPT)
target prot opt source destination

(选项)添加FORWARD过滤器

如果您默认将FORWARD设置为DROP,请添加以下FORWARD过滤器。

forward_rule
ubuntu-1:〜$ sudo iptables -A FORWARD -m tcp -p tcp –dst 10.0.19.96 –dport 3000 -j ACCEPT
ubuntu-1:〜$ sudo iptables -A FORWARD -m tcp -p tcp –dst 192.168.0.5 –dport 8082 -j ACCEPT
ubuntu-1:〜$ sudo iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT

显示转发过滤器
ubuntu-1:〜$ sudo iptables -nL FORWARD
Chain FORWARD(策略DROP)
target prot opt source destination
ACCEPT tcp — 0.0.0.0/0 10.0.19.96 tcp dpt:3000
ACCEPT tcp — 0.0.0.0/0 192.168.0.5 tcp dpt:8082
ACCEPT all — 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

在Ubuntu-1的iptables中,设置一个NAT定义,将本地系统的虚拟网络中的testservice(10.0.19.96)的端口3000转发,并设置另一个NAT定义,将VPN网络中的端口8082转发到Ubuntu-2(192.168.0.5)。

在Kubernetes上验证testservice的连通性

ubuntu-2:~$ curl -i http://192.168.0.4:3000
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 17 Apr 2018 05:28:33 GMT
Connection: keep-alive
Transfer-Encoding: chunked

{"message":"hello world!"}

由于ubuntu-2没有与Kubernetes连接,并且也没有进行特别的路由设置,因此无法直接将数据包从ubuntu-2发送至testservice的IP地址10.0.19.96。然而,通过将端口3000在ubuntu-1(192.168.0.4)上进行NAT转发至testservice(10.0.19.96),可以通过ubuntu-1访问Kubernetes的testservice进行HTTP连接。

ubuntu-2=>testservice.png

在Kubernetes上,对于ubuntu-2的HTTP守护进程进行连通性确认。

    1. 在Ubuntu-2上准备index.html文件。

index.html文件内容:
Ubuntu-2

在Ubuntu-2上以8082端口启动HTTP守护进程。

启动HTTP守护进程命令:
ubuntu-2:~$ python -m SimpleHTTPServer 8082

在Kubernetes上启动一个可以使用curl命令的POD。

启动POD命令:
mac:kubernetes-openvpn$ kubectl run testpod –rm -it –image=yauritux/busybox-curl

从POD访问Testproxy的8082端口。

从POD访问Ubuntu-2的命令:
pod:~$ curl -i http://testproxy-2:8082/
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.12
Date: Tue, 17 Apr 2018 05:45:23 GMT
Content-type: text/html
Content-Length: 79
Last-Modified: Tue, 17 Apr 2018 05:35:00 GMT

Ubuntu-2

通过Kubernetes的POD,经过OpenVPN服务器的NAT和ubuntu-1的NAT,已确认可以通过HTTP连接到ubuntu-2的HTTP守护程序。

testpod=>ubuntu-2.png

最后
最终
最后
最后
最后
最后
最后
最后
最后
最后

这样一来,我们通过在Kubernetes上搭建的OpenVPN服务器成功连接了Kubernetes和本地系统的虚拟网络(目前OpenVPN Pod还是单点故障……)。
虽然OpenVPN客户端VM的NAT设置有些麻烦,但是我们不需要对本地系统的其他VM进行特别配置,就可以与Kubernetes进行协作,所以我们只需要忍耐一下这一点。
让我们巧妙地利用它,度过愉快的Kubernetes生活吧!

广告
将在 10 秒后关闭
bannerAds