1. 程式人生 > 其它 >gRPC四種模式、認證和授權,C#實戰演示

gRPC四種模式、認證和授權,C#實戰演示

docker 的 網路模式

docker 自帶 3 種 網路模式:分別是bridge網路,host網路,none網路,可以使用 docker network ls 命令檢視。

1.none網路

none模式可以在容器建立時通過--network=none來指定。這種型別的網路沒有辦法聯網,封閉的網路能很好的保證容器的安全性。

使用none模式,Docker容器擁有自己的Network Namespace,但是,並不為Docker容器進行任何網路配置。也就是說,這個Docker容器沒有網絡卡、IP、路由等資訊。需要我們自己為Docker容器新增網絡卡、配置IP等。

這種網路模式下容器只有lo迴環網路,沒有其他網絡卡。這種型別的網路沒有辦法聯網,封閉的網路能很好的保證容器的安全性。

2.host網路

通過命令--network=host指定。

如果啟動容器的時候使用host模式,那麼這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網絡卡,配置自己的IP等,而是使用宿主機的IP和埠。但是,容器的其他方面,如檔案系統、程序列表等還是和宿主機隔離的。

使用host模式的容器可以直接使用宿主機的IP地址與外界通訊,容器內部的服務埠也可以使用宿主機的埠,不需要進行NAT,host最大的優勢就是網路效能比較好,但是docker host上已經使用的埠就不能再用了,網路的隔離性不好。

3.bridge網路

容器的預設網路模式,docker在安裝時會建立一個名為docker0的Linuxbridge,在不指定--network的情況下,建立的容器都會預設掛到docker0上面。

當Docker程序啟動時,會在主機上建立一個名為docker0的虛擬網橋,此主機上啟動的Docker容器會連線到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網路中。

從docker0子網中分配一個IP給容器使用,並設定docker0的IP地址為容器的預設閘道器。在主機上建立一對虛擬網絡卡veth pair裝置,Docker將veth pair裝置的一端放在新建立的容器中,並命名為eth0(容器的網絡卡),另一端放在主機中,以vethxxx這樣類似的名字命名,並將這個網路裝置加入到docker0網橋中。可以通過brctl show命令檢視。

bridge模式是docker的預設網路模式,不寫--net引數,就是bridge模式。使用docker run -p時,docker實際是在iptables做了DNAT規則,實現埠轉發功能。可以使用iptables -t nat -vnL檢視。

建立多個容器,都不指定 net 情況下 ,docker network inspect bridge, 檢視 bridge 網路情況。

檢視 主機網橋情況 ,brctl show,在 docker0 網橋下有3個介面,對應前面容器的各自的虛擬網絡卡。建立一個容器之後一個新的網路介面被掛載到了docker0上,這個就是容器建立時建立的虛擬網絡卡。bridge模式為容器建立獨立的網路棧,保證容器內的程序使用獨立的網路環境,使容器之間,容器和docker host之間實現網路隔離。

這裡可以看出 docker0 網橋 上對應有3個容器掛靠的虛擬網絡卡, 此 3 個容器之間可以互相通訊,因為在同一個網橋下。

思考?? 不同網橋下的容器間 能通訊嗎?

1. 先手動建立一個 bridge 模式的新 網橋, docker network create --driver bridge--subnet=172.18.0.0/16 --gateway=172.18.0.1 new_bridge

2. docker network ls 可以檢視 docker 下現在的網路模式(新加的那個)

3. docker run -name test1 -ti --net=new_bridge 映象名 (用新網橋的一個容器 test1)

4. docker run -name test2 -ti --net=bridge映象名 (用 docker 預設網橋的一個容器test2)

5. 進入到其中一個容器 ,ip a 檢視網絡卡,ping 另一個容器IP

6. 進另一個容器,同上。 兩個容器IP段不一樣。 不同網橋,會建立不同網段的虛擬網絡卡給容器 。

7. 不同網橋下的容器間 不能ping通, 在於docker 設計時候就隔離了不同網橋  

8. docker network connect new_bridge test2 // 為 test2 容器新增一塊 new_bridge的 虛擬網絡卡,這樣test2 上會 建立一個新的虛擬網絡卡,網段就是 新網橋設定的。

9. 如此就能互相ping通。

4.container模式

建立容器時使用--network=container:NAME_or_ID這個模式在建立新的容器的時候指定容器的網路和一個已經存在的容器共享一個Network Namespace,

這個模式指定新建立的容器和已經存在的一個容器共享一個 Network Namespace,而不是和宿主機共享。新建立的容器不會建立自己的網絡卡,配置自己的 IP,而是和一個指定的容器共享 IP、埠範圍等。同樣,兩個容器除了網路方面,其他的如檔案系統、程序列表等還是隔離的。兩個容器的程序可以通過 lo 網絡卡裝置通訊。

5.user-defined模式

使用者自定義模式主要可選的有三種網路驅動:bridge、overlay、macvlan。bridge驅動用於建立類似於前面提到的bridge網路;overlay和macvlan驅動用於建立跨主機的網路。

前面自定義的網路模式 new_bridge 就是新網路模式。另外兩個後面在驗證。

docker的埠對映

docker的埠對映,能保證在外部網路 訪問 同一裝置上不同容器時候 不會因為埠問題產生衝突。

docker 可將容器對外提供服務的埠對映到 host 的某個埠,外網通過該埠訪問容器。容器啟動時通過-p引數對映埠:

可以使用-p引數顯式將一個或者一組埠從容器裡繫結到宿主機上,而不僅僅是提供一個埠。注意這裡是小寫的p,不是大寫。

因為該配置依賴於宿主機器,所以Dockerfile裡沒有對應的指令,這是執行時才可用的配置。-p引數有幾種不同的格式:

ip:hostPort:containerPort|ip::containerPort|hostPort:containerPort|containerPort