1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        KubeVPN云原生開(kāi)發(fā)環(huán)境

        聯(lián)合創(chuàng)作 · 2023-09-27 12:24

        KubeVPN 是一個(gè)云原生開(kāi)發(fā)工具,可以在本地連接云端 kubernetes 網(wǎng)絡(luò)的工具,可以在本地直接訪問(wèn)遠(yuǎn)端集群的服務(wù)。也可以在遠(yuǎn)端集群訪問(wèn)到本地服務(wù),便于調(diào)試及開(kāi)發(fā)。同時(shí)還可以使用開(kāi)發(fā)模式,直接在本地使用 Docker 將遠(yuǎn)程容器運(yùn)行在本地。

        功能

        鏈接到集群網(wǎng)絡(luò)

        ?  ~ kubevpn connect
        get cidr from cluster info...
        get cidr from cluster info ok
        get cidr from cni...
        get cidr from svc...
        get cidr from svc ok
        traffic manager not exist, try to create it...
        pod [kubevpn-traffic-manager] status is Pending
        Container Reason Message
        
        pod [kubevpn-traffic-manager] status is Pending
        Container     Reason            Message
        control-plane ContainerCreating
        vpn           ContainerCreating
        webhook       ContainerCreating
        
        pod [kubevpn-traffic-manager] status is Running
        Container     Reason           Message
        control-plane ContainerRunning
        vpn           ContainerRunning
        webhook       ContainerRunning
        
        update ref count successfully
        port forward ready
        your ip is 223.254.0.101
        tunnel connected
        dns service ok
        
        ---------------------------------------------------------------------------
            Now you can access resources in the kubernetes cluster, enjoy it :)
        ---------------------------------------------------------------------------
        

        有這個(gè)提示出來(lái)后, 當(dāng)前 terminal 不要關(guān)閉,新打開(kāi)一個(gè) terminal, 執(zhí)行新的操作

        ?  ~ kubectl get pods -o wide
        NAME                                     READY   STATUS      RESTARTS   AGE     IP             NODE          NOMINATED NODE   READINESS GATES
        details-7db5668668-mq9qr                 1/1     Running     0          7m      172.27.0.199   172.30.0.14   <none>           <none>
        kubevpn-traffic-manager-99f8c8d77-x9xjt  1/1     Running     0          74s     172.27.0.207   172.30.0.14   <none>           <none>
        productpage-8f9d86644-z8snh              1/1     Running     0          6m59s   172.27.0.206   172.30.0.14   <none>           <none>
        ratings-859b96848d-68d7n                 1/1     Running     0          6m59s   172.27.0.201   172.30.0.14   <none>           <none>
        reviews-dcf754f9d-46l4j                  1/1     Running     0          6m59s   172.27.0.202   172.30.0.14   <none>           <none>
        ?  ~ ping 172.27.0.206
        PING 172.27.0.206 (172.27.0.206): 56 data bytes
        64 bytes from 172.27.0.206: icmp_seq=0 ttl=63 time=49.563 ms
        64 bytes from 172.27.0.206: icmp_seq=1 ttl=63 time=43.014 ms
        64 bytes from 172.27.0.206: icmp_seq=2 ttl=63 time=43.841 ms
        64 bytes from 172.27.0.206: icmp_seq=3 ttl=63 time=44.004 ms
        64 bytes from 172.27.0.206: icmp_seq=4 ttl=63 time=43.484 ms
        ^C
        --- 172.27.0.206 ping statistics ---
        5 packets transmitted, 5 packets received, 0.0% packet loss
        round-trip min/avg/max/stddev = 43.014/44.781/49.563/2.415 ms
        ?  ~ kubectl get services -o wide
        NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE     SELECTOR
        details       ClusterIP   172.27.255.92    <none>        9080/TCP   9m7s    app=details
        productpage   ClusterIP   172.27.255.48    <none>        9080/TCP   9m6s    app=productpage
        ratings       ClusterIP   172.27.255.154   <none>        9080/TCP   9m7s    app=ratings
        reviews       ClusterIP   172.27.255.155   <none>        9080/TCP   9m6s    app=reviews
        ?  ~ curl 172.27.255.48: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">

        域名解析功能

        ?  ~ curl productpage.default.svc.cluster.local: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">

        短域名解析功能

        ?  ~ curl productpage:9080
        <!DOCTYPE html>
        <html>
          <head>
            <title>Simple Bookstore App</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        ...

        反向代理

        ?  ~ kubevpn proxy deployment/productpage
        got cidr from cache
        traffic manager not exist, try to create it...
        pod [kubevpn-traffic-manager] status is Running
        Container     Reason           Message
        control-plane ContainerRunning
        vpn           ContainerRunning
        webhook       ContainerRunning
        
        update ref count successfully
        Waiting for deployment "productpage" rollout to finish: 1 out of 2 new replicas have been updated...
        Waiting for deployment "productpage" rollout to finish: 1 out of 2 new replicas have been updated...
        Waiting for deployment "productpage" rollout to finish: 1 out of 2 new replicas have been updated...
        Waiting for deployment "productpage" rollout to finish: 1 old replicas are pending termination...
        Waiting for deployment "productpage" rollout to finish: 1 old replicas are pending termination...
        deployment "productpage" successfully rolled out
        port forward ready
        your ip is 223.254.0.101
        tunnel connected
        dns service ok
        
        ---------------------------------------------------------------------------
            Now you can access resources in the kubernetes cluster, enjoy it :)
        ---------------------------------------------------------------------------
        
        package main
        
        import (
        	"io"
        	"net/http"
        )
        
        func main() {
        	http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
        		_, _ = io.WriteString(writer, "Hello world!")
        	})
        	_ = http.ListenAndServe(":9080", nil)
        }
        ?  ~ curl productpage:9080
        Hello world!%
        ?  ~ curl productpage.default.svc.cluster.local:9080
        Hello world!%

        反向代理支持 service mesh

        支持 HTTP, GRPC 和 WebSocket 等, 攜帶了指定 header "a: 1" 的流量,將會(huì)路由到本地

        ?  ~ kubevpn proxy deployment/productpage --headers a=1
        got cidr from cache
        traffic manager not exist, try to create it...
        pod [kubevpn-traffic-manager] status is Running
        Container     Reason           Message
        control-plane ContainerRunning
        vpn           ContainerRunning
        webhook       ContainerRunning
        
        update ref count successfully
        Waiting for deployment "productpage" rollout to finish: 1 out of 2 new replicas have been updated...
        Waiting for deployment "productpage" rollout to finish: 1 out of 2 new replicas have been updated...
        Waiting for deployment "productpage" rollout to finish: 1 out of 2 new replicas have been updated...
        Waiting for deployment "productpage" rollout to finish: 1 old replicas are pending termination...
        Waiting for deployment "productpage" rollout to finish: 1 old replicas are pending termination...
        deployment "productpage" successfully rolled out
        port forward ready
        your ip is 223.254.0.101
        tunnel connected
        dns service ok
        
        ---------------------------------------------------------------------------
            Now you can access resources in the kubernetes cluster, enjoy it :)
        ---------------------------------------------------------------------------
        
        ?  ~ curl productpage: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">
        ...
        ?  ~ curl productpage:9080 -H "a: 1"
        Hello world!%

        本地進(jìn)入開(kāi)發(fā)模式

        將 Kubernetes pod 運(yùn)行在本地的 Docker 容器中,同時(shí)配合 service mesh, 攔截帶有制定 header 的流量到本地,或者所有的流量到本地。這個(gè)開(kāi)發(fā)模式依賴于本地 Docker .

        ?  ~ kubevpn -n kube-system --headers a=1 -p 9080:9080 -p 80:80 dev deployment/authors
        got cidr from cache
        update ref count successfully
        traffic manager already exist, reuse it
        Waiting for deployment "authors" rollout to finish: 1 old replicas are pending termination...
        Waiting for deployment "authors" rollout to finish: 1 old replicas are pending termination...
        deployment "authors" successfully rolled out
        port forward ready
        tunnel connected
        dns service ok
        tar: removing leading '/' from member names
        /var/folders/4_/wt19r8113kq_mfws8sb_w1z00000gn/T/3264799524258261475:/var/run/secrets/kubernetes.io/serviceaccount
        tar: Removing leading '/' from member names
        tar: Removing leading '/' from hard link targets
        /var/folders/4_/wt19r8113kq_mfws8sb_w1z00000gn/T/4472770436329940969:/var/run/secrets/kubernetes.io/serviceaccount
        tar: Removing leading '/' from member names
        tar: Removing leading '/' from hard link targets
        /var/folders/4_/wt19r8113kq_mfws8sb_w1z00000gn/T/359584695576599326:/var/run/secrets/kubernetes.io/serviceaccount
        Created container: authors_kube-system_kubevpn_a7d82
        Wait container authors_kube-system_kubevpn_a7d82 to be running...
        Container authors_kube-system_kubevpn_a7d82 is running on port 9080/tcp:32771 now
        Created container: nginx_kube-system_kubevpn_a7d82
        Wait container nginx_kube-system_kubevpn_a7d82 to be running...
        Container nginx_kube-system_kubevpn_a7d82 is running now
        /opt/microservices # ls
        app
        /opt/microservices # ps -ef
        PID   USER     TIME  COMMAND
            1 root      0:00 ./app
           10 root      0:00 nginx: master process nginx -g daemon off;
           32 root      0:00 /bin/sh
           44 101       0:00 nginx: worker process
           45 101       0:00 nginx: worker process
           46 101       0:00 nginx: worker process
           47 101       0:00 nginx: worker process
           49 root      0:00 ps -ef
        /opt/microservices # apk add curl
        fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
        fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
        (1/4) Installing brotli-libs (1.0.9-r5)
        (2/4) Installing nghttp2-libs (1.43.0-r0)
        (3/4) Installing libcurl (7.79.1-r5)
        (4/4) Installing curl (7.79.1-r5)
        Executing busybox-1.33.1-r3.trigger
        OK: 8 MiB in 19 packages
        /opt/microservices # curl localhost:9080
        404 page not found
        /opt/microservices # curl localhost:9080/health
        {"status":"Authors is healthy"}/opt/microservices # exit
        prepare to exit, cleaning up
        update ref count successfully
        clean up successful

        此時(shí)本地會(huì)啟動(dòng)兩個(gè) container, 對(duì)應(yīng) pod 容器中的兩個(gè) container, 并且共享端口, 可以直接使用 localhost:port 的形式直接訪問(wèn)另一個(gè) container, 并且, 所有的環(huán)境變量、掛載卷、網(wǎng)絡(luò)條件都和 pod 一樣, 真正做到與 kubernetes 運(yùn)行環(huán)境一致。

        ?  ~ docker ps
        CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                        NAMES
        de9e2f8ab57d        nginx:latest            "/docker-entrypoint.…"   5 seconds ago       Up 5 seconds                                                     nginx_kube-system_kubevpn_e21d8
        28aa30e8929e        naison/authors:latest   "./app"                  6 seconds ago       Up 5 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:9080->9080/tcp   authors_kube-system_kubevpn_e21d8
        ?  ~

        如果你想指定在本地啟動(dòng)容器的鏡像, 可以使用參數(shù) --docker-image, 當(dāng)本地不存在該鏡像時(shí), 會(huì)從對(duì)應(yīng)的鏡像倉(cāng)庫(kù)拉取。如果你想指定啟動(dòng)參數(shù),可以使用 --entrypoint 參數(shù),替換為你想要執(zhí)行的命令,比如 --entrypoint /bin/bash, 更多使用參數(shù),請(qǐng)參見(jiàn) kubevpn dev --help.

        DinD ( Docker in Docker ) 在 Docker 中使用 kubevpn

        如果你想在本地使用 Docker in Docker (DinD) 的方式啟動(dòng)開(kāi)發(fā)模式, 由于程序會(huì)讀寫(xiě) /tmp 目錄,您需要手動(dòng)添加參數(shù) -v /tmp:/tmp, 還有一點(diǎn)需要注意, 如果使用 DinD 模式,為了共享容器網(wǎng)絡(luò)和 pid, 還需要指定參數(shù) --network

        例如:

        docker run -it --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /tmp:/tmp -v /Users/naison/.kube/config:/root/.kube/config naison/kubevpn:v1.1.21
        ?  ~ docker run -it --privileged -c authors -v /var/run/docker.sock:/var/run/docker.sock -v /tmp:/tmp -v /Users/naison/.kube/config:/root/.kube/config naison/kubevpn:v1.1.21
        root@4d0c3c4eae2b:/# hostname
        4d0c3c4eae2b
        root@4d0c3c4eae2b:/# kubevpn -n kube-system --image naison/kubevpn:v1.1.21 --headers user=naison --network container:4d0c3c4eae2b --entrypoint /bin/bash  dev deployment/authors
        
        ----------------------------------------------------------------------------------
            Warn: Use sudo to execute command kubevpn can not use user env KUBECONFIG.
            Because of sudo user env and user env are different.
            Current env KUBECONFIG value:
        ----------------------------------------------------------------------------------
        
        got cidr from cache
        traffic manager not exist, try to create it...
        pod [kubevpn-traffic-manager] status is Pending
        Container Reason Message
        
        pod [kubevpn-traffic-manager] status is Pending
        Container     Reason            Message
        control-plane ContainerCreating
        vpn           ContainerCreating
        webhook       ContainerCreating
        
        pod [kubevpn-traffic-manager] status is Running
        Container     Reason           Message
        control-plane ContainerRunning
        vpn           ContainerRunning
        webhook       ContainerRunning
        
        update ref count successfully
        Waiting for deployment "authors" rollout to finish: 1 old replicas are pending termination...
        Waiting for deployment "authors" rollout to finish: 1 old replicas are pending termination...
        deployment "authors" successfully rolled out
        port forward ready
        tunnel connected
        dns service ok
        tar: removing leading '/' from member names
        /tmp/3122262358661539581:/var/run/secrets/kubernetes.io/serviceaccount
        tar: Removing leading '/' from member names
        tar: Removing leading '/' from hard link targets
        /tmp/7677066538742627822:/var/run/secrets/kubernetes.io/serviceaccount
        latest: Pulling from naison/authors
        Digest: sha256:2e7b2d6a4c6143cde888fcdb70ba091d533e11de70e13e151adff7510a5d52d4
        Status: Downloaded newer image for naison/authors:latest
        Created container: authors_kube-system_kubevpn_c68e4
        Wait container authors_kube-system_kubevpn_c68e4 to be running...
        Container authors_kube-system_kubevpn_c68e4 is running now
        Created container: nginx_kube-system_kubevpn_c68e7
        Wait container nginx_kube-system_kubevpn_c68e7 to be running...
        Container nginx_kube-system_kubevpn_c68e7 is running now
        /opt/microservices # ps -ef
        PID   USER     TIME  COMMAND
            1 root      0:00 {bash} /usr/bin/qemu-x86_64 /bin/bash /bin/bash
           60 root      0:07 {kubevpn} /usr/bin/qemu-x86_64 kubevpn kubevpn dev deployment/authors -n kube-system --image naison/kubevpn:v1.1.21 --headers user=naison --parent
           73 root      0:00 {tail} /usr/bin/qemu-x86_64 /usr/bin/tail tail -f /dev/null
           80 root      0:00 {nginx} /usr/bin/qemu-x86_64 /usr/sbin/nginx nginx -g daemon off;
           92 root      0:00 {sh} /usr/bin/qemu-x86_64 /bin/sh /bin/sh
          156 101       0:00 {nginx} /usr/bin/qemu-x86_64 /usr/sbin/nginx nginx -g daemon off;
          158 101       0:00 {nginx} /usr/bin/qemu-x86_64 /usr/sbin/nginx nginx -g daemon off;
          160 101       0:00 {nginx} /usr/bin/qemu-x86_64 /usr/sbin/nginx nginx -g daemon off;
          162 101       0:00 {nginx} /usr/bin/qemu-x86_64 /usr/sbin/nginx nginx -g daemon off;
          164 root      0:00 ps -ef
        /opt/microservices # ls
        app
        /opt/microservices # apk add curl
        fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
        fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
        (1/4) Installing brotli-libs (1.0.9-r5)
        (2/4) Installing nghttp2-libs (1.43.0-r0)
        (3/4) Installing libcurl (7.79.1-r5)
        (4/4) Installing curl (7.79.1-r5)
        Executing busybox-1.33.1-r3.trigger
        OK: 8 MiB in 19 packages
        /opt/microservices # curl localhost:80
        <!DOCTYPE html>
        <html>
        <head>
        <title>Welcome to nginx!</title>
        <style>
        html { color-scheme: light dark; }
        body { width: 35em; margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif; }
        </style>
        </head>
        <body>
        <h1>Welcome to nginx!</h1>
        <p>If you see this page, the nginx web server is successfully installed and
        working. Further configuration is required.</p>
        
        <p>For online documentation and support please refer to
        <a href="http://nginx.org/">nginx.org</a>.<br/>
        Commercial support is available at
        <a href="http://nginx.com/">nginx.com</a>.</p>
        
        <p><em>Thank you for using nginx.</em></p>
        </body>
        </html>
        /opt/microservices # ls
        app
        /opt/microservices # exit
        prepare to exit, cleaning up
        update ref count successfully
        ref-count is zero, prepare to clean up resource
        clean up successful
        root@4d0c3c4eae2b:/# exit
        exit

        支持多種協(xié)議

        • TCP
        • UDP
        • ICMP
        • GRPC
        • WebSocket
        • HTTP
        • ...

        支持三大平臺(tái)

        • macOS
        • Linux
        • Windows

        Windows 下需要安裝 PowerShell

        瀏覽 23
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            一级操逼大片 | 九色porny丨精品自拍视 | 男女激情免费网站 | 精品一区二区三区日韩 | 国产成人午夜福利 | 性v天堂 | 日本一级全黄60分钟 | 女人被狂躁c | 无码做爰XXXⅩ | 色丁香五月 |