KubeVPN
1.install krew
- download and install
krew
- download and install
- Add the $HOME/.krew/bin directory to your PATH environment variable.
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
- Run kubectl krew to check the installation
kubectl krew list
2. Download from kubevpn source from github
kubectl krew index add kubevpn https://gitclone.com/github.com/kubenetworks/kubevpn.git
kubectl krew install kubevpn/kubevpn
kubectl kubevpn
3. Deploy VPN in some cluster
Using different config to access different cluster and deploy vpn in that k8s.
kubectl kubevpn connect
Your terminal should look like this:
➜ ~ kubectl kubevpn connect
Password:
Starting connect
Getting network CIDR from cluster info...
Getting network CIDR from CNI...
Getting network CIDR from services...
Labeling Namespace default
Creating ServiceAccount kubevpn-traffic-manager
Creating Roles kubevpn-traffic-manager
Creating RoleBinding kubevpn-traffic-manager
Creating Service kubevpn-traffic-manager
Creating MutatingWebhookConfiguration kubevpn-traffic-manager
Creating Deployment kubevpn-traffic-manager
Pod kubevpn-traffic-manager-66d969fd45-9zlbp is Pending
Container Reason Message
control-plane ContainerCreating
vpn ContainerCreating
webhook ContainerCreating
Pod kubevpn-traffic-manager-66d969fd45-9zlbp is Running
Container Reason Message
control-plane ContainerRunning
vpn ContainerRunning
webhook ContainerRunning
Forwarding port...
Connected tunnel
Adding route...
Configured DNS service
+----------------------------------------------------------+
| Now you can access resources in the kubernetes cluster ! |
+----------------------------------------------------------+
already connected to cluster network, use command kubectl kubevpn status
to check status
➜ ~ kubectl kubevpn status
ID Mode Cluster Kubeconfig Namespace Status Netif
0 full ops-dev /root/.kube/zverse_config data-and-computing Connected utun0
use pod productpage-788df7ff7f-jpkcs
IP 172.29.2.134
➜ ~ kubectl get pods -o wide
NAME AGE IP NODE NOMINATED NODE GATES
authors-dbb57d856-mbgqk 7d23h 172.29.2.132 192.168.0.5 <none>
details-7d8b5f6bcf-hcl4t 61d 172.29.0.77 192.168.104.255 <none>
kubevpn-traffic-manager-66d969fd45-9zlbp 74s 172.29.2.136 192.168.0.5 <none>
productpage-788df7ff7f-jpkcs 61d 172.29.2.134 192.168.0.5 <none>
ratings-77b6cd4499-zvl6c 61d 172.29.0.86 192.168.104.255 <none>
reviews-85c88894d9-vgkxd 24d 172.29.2.249 192.168.0.5 <none>
use ping
to test connection, seems good
➜ ~ ping 172.29.2.134
PING 172.29.2.134 (172.29.2.134): 56 data bytes
64 bytes from 172.29.2.134: icmp_seq=0 ttl=63 time=55.727 ms
64 bytes from 172.29.2.134: icmp_seq=1 ttl=63 time=56.270 ms
64 bytes from 172.29.2.134: icmp_seq=2 ttl=63 time=55.228 ms
64 bytes from 172.29.2.134: icmp_seq=3 ttl=63 time=54.293 ms
^C
--- 172.29.2.134 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 54.293/55.380/56.270/0.728 ms
use service productpage
IP 172.21.10.49
➜ ~ kubectl get services -o wide
NAME TYPE CLUSTER-IP PORT(S) SELECTOR
authors ClusterIP 172.21.5.160 9080/TCP app=authors
details ClusterIP 172.21.6.183 9080/TCP app=details
kubernetes ClusterIP 172.21.0.1 443/TCP <none>
kubevpn-traffic-manager ClusterIP 172.21.2.86 84xxxxxx0/TCP app=kubevpn-traffic-manager
productpage ClusterIP 172.21.10.49 9080/TCP app=productpage
ratings ClusterIP 172.21.3.247 9080/TCP app=ratings
reviews ClusterIP 172.21.8.24 9080/TCP app=reviews
use command curl
to test service connection
➜ ~ curl 172.21.10.49:9080
<!DOCTYPE html>
<html>
<head>
<title>Simple Bookstore App</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
seems good too~