在上一篇《邊緣計算k8s叢集之SuperEdge》部落格中,筆者基於ECK搭建了邊緣叢集並新增了節點。通過邊緣叢集,我們可以很方便的管理各個地域的節點,本地、各雲廠商的機房、客戶所在地、海外的都可以。在本篇內容,我們將講述如何使用ipsec-vpn-server,通過一行命令即可搭建內部的管道,用於鍛鍊技術,技術學習。
ipsec-vpn-server
ipsec-vpn-server可以讓我們快速通過容器映象搭建 IPsec VPN 伺服器,支援 IPsec/L2TP
,Cisco IPsec
和 IKEv2
協議。
官方映象地址:https://hub.docker.com/r/hwdsl2/ipsec-vpn-server
Github地址:https://github.com/hwdsl2/docker-ipsec-vpn-server
官方的文件比較齊全,具體可以參考:https://github.com/hwdsl2/docker-ipsec-vpn-server/blob/master/README-zh.md
接下來,我們來演示下如何一行命令即可搭建自己的VPN伺服器。
Docker部署
參考指令碼如下所示:
docker run \ --name ipsec-vpn-server \ --env-file ./vpn.env \ --restart=always \ -v ikev2-vpn-data:/etc/ipsec.d \ -p 500:500/udp \ -p 4500:4500/udp \ -d --privileged \ hwdsl2/ipsec-vpn-server
env檔案定義參考如下:
VPN_IPSEC_PSK=your_ipsec_pre_shared_key VPN_USER=your_vpn_username VPN_PASSWORD=your_vpn_password
執行成功後,可以檢視docker日誌(命令參考:docker logs ipsec-vpn-server)獲得相關客戶端配置資訊。
日誌中會輸出以下內容:
Connect to your new VPN with these details: Server IP: 你的VPN伺服器IP IPsec PSK: 你的IPsec預共享金鑰 Username: 你的VPN使用者名稱 Password: 你的VPN密碼
K8s部署
參考Yaml如下所示:
apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "2" generation: 2 labels: k8s-app: ipsec-vpn-server name: ipsec-vpn-server namespace: default spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: k8s-app: ipsec-vpn-server strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate template: metadata: annotations: edge.tke.cloud.tencent.com/cpu: "1" edge.tke.cloud.tencent.com/mem: 2Gi creationTimestamp: null labels: k8s-app: ipsec-vpn-server spec: containers: - env: - name: VPN_IPSEC_PSK #IPsec PSK,預共享金鑰 value: "your_ipsec_pre_shared_key" - name: VPN_USER #使用者名稱 value: your_user_name - name: VPN_PASSWORD #密碼 value: "you_password" - name: VPN_SETUP_IKEV2 #啟用IKEv2協議,推薦 value: "yes" image: hwdsl2/ipsec-vpn-server imagePullPolicy: Always name: ipsec-vpn-server resources: limits: cpu: 500m memory: 1Gi requests: cpu: 250m memory: 256Mi securityContext: privileged: true #開啟特級許可權 dnsPolicy: ClusterFirst hostNetwork: true #使用Host網路 restartPolicy: Always terminationGracePeriodSeconds: 30
kubectl create -f ipsec-vpn.yaml
執行成功後,通過可以通過日誌得到相關配置資訊:
這裡有不清楚的,可以參考筆者之前的教程:《使用Kubectl部署應用》。
關於host network
在k8s中我們使用了host network模式,在docker中我們也可以採用這種模式。這是因為IKEv2協議的埠是固定的,如果通過k8s的service轉發,則埠就發生了改變,因此在k8s中我們使用了host network模式,但是這是不推薦的。在該模式下,容器的網路棧未與 容器主機隔離,從而在使用 IPsec/L2TP 模式連線之後,VPN 客戶端可以使用主機的 VPN 內網 IP 訪問主機上的埠或服務。
埠說明
需要開啟 UDP 埠 500 和 4500。
客戶端連線配置
支援Window、OS X、Android、IOS、Chromebook、Linux,官方文件比較齊全,請參考:
無需額外安裝客戶端:https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-zh.md
Cisco IPsec(更高效地傳輸資料(較低的額外開銷)):https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-xauth-zh.md
最後
是不是超級簡單呢?趕緊實踐實踐吧?
如果對Docker和k8s還存在疑問,可以參考筆者之前的教程、部落格和書籍《Docker+Kubernetes應用開發與快速上雲》。