Monday, August 21, 2023

在 Docker 中使用 Koko 工具創建網絡連接的示例

在 Docker 中使用 Koko 工具創建網絡連接的示例

在 Docker 環境中,經常需要創建不同容器之間的網絡連接以及配置網絡參數。Koko 是一個工具,可以幫助我們在 Docker 容器中設置網絡連接。本文將介紹如何使用 Koko 工具在 Docker 容器中創建網絡連接,並顯示一些示例命令。

1.創建獨立的網絡連接

首先,我們可以使用以下命令在兩個 Ubuntu 容器之間創建獨立的網絡連接:

sudo docker run --network none -dt --name ubuntu1 ubuntu:bionic /bin/bash
sudo docker run --network none -dt --name ubuntu2 ubuntu:bionic /bin/bash

這將在兩個容器之間創建一個隔離的網絡環境,使它們能夠相互通信。

2.在容器中創建veth對

接下來,我們可以使用以下命令容器在主機和主機之間創建 veth 對:

sudo ./koko -c net1 -d k8s_helloworld-python_helloworld-python_default_409cdca7-6c2a-45bf-a885-a5e6794f34c1_22,net1,10.200.0.2/24
sudo ./koko -c net2 -d k8s_helloworld-python-access-pod_helloworld-python-access-pod_default_36bf5089-8791-44dc-aa0c-40d1bd09a8c4_22,net1,10.200.0.3/24

接下來的命令將在容器和主機之間創建兩個 veth 對 net1 和 net2,並為它們分配 IP 地址。

3.創建橋接網絡

我們可以通過以下步驟創建一個橋接網絡放置veth對連接到橋接接口:

sudo ip l a br0 type bridge
sudo ip l s br0 up
sudo ip l s net1 master br0
sudo ip l s net2 master br0

這將創建一個名為 br0 的橋接接口,把 net1 和 net2 連接到這個橋接接口上。

4. 在命名空間中顯示IP地址

要顯示容器中的IP地址,我們可以使用以下命令:

sudo docker exec -it k8s_micro-apm_micro-apm-qj76q_kube-system_5bd48be1-5530-4811-a546-1d4a688343a2_3 ip addr | grep -P "^\d|inet "
sudo docker exec -it k8s_helloworld-python_helloworld-python_default_409cdca7-6c2a-45bf-a885-a5e6794f34c1_22 ip addr | grep -P "^\d|inet "
sudo docker exec -it k8s_helloworld-python-access-pod_helloworld-python-access-pod_default_36bf5089-8791-44dc-aa0c-40d1bd09a8c4_22 ip addr | grep -P "^\d|inet "
sudo docker exec -it k8s_micro-apm_micro-apm-qj76q_kube-system_5bd48be1-5530-4811-a546-1d4a688343a2_3 ping -c5 10.200.0.2

這些命令將顯示容器中的 IP 地址,並且最後一條命令還會在容器之間執行 Ping 測試。

5.清理網絡連接

最後,我們可以使用以下命令來清理網絡連接:

sudo ./koko -D k8s_micro-apm_micro-apm-qj76q_kube-system_5bd48be1-5530-4811-a546-1d4a688343a2_3,net1
sudo ./koko -D k8s_helloworld-python_helloworld-python_default_409cdca7-6c2a-45bf-a885-a5e6794f34c1_22,net1
sudo ./koko -D k8s_helloworld-python-access-pod_helloworld-python-access-pod_default_36bf5089-8791-44dc-aa0c-40d1bd09a8c4_22,net1
sudo ip l d br0

在創建網絡連接和橋接接口之前將清理命令。

結論

通過這些示例命令,我們可以在 Docker 容器中使用 Koko 工具來創建、管理和清理網絡連接,滿足不同的網絡配置需求。希望本文能夠幫助您更好地理解如何在 Docker 環境中進行網絡設置。

Thursday, June 30, 2022

[TensorFlow Lite] TensorFlow Lite 有用的工具

TensorFlow Lite Tool: Toco (轉換器)

toco是用來生成一個可供TensorFlow Lite框架使用tflite文件。

bazel 編譯方式
$ bazel build tensorflow/lite/toco:toco

程式位於tensorflow/lite/toco資料夾下。Toco有三個主要功能,即匯入、匯出和轉換。匯入將輸入轉為Model類別,匯出將模型轉為flite模型或是grpahviz。轉換以輸入標示為基礎對模型操作,並且它會刪除未使用的運算元等。

Saturday, June 18, 2022

[Raspberry Pi] Install TensorFlow Lite on Raspberry Pi 4

Build TensorFlow Lite Static Library on Raspberry Pi 4

I found a very useful resource about installing TensorFlow Lite 2.* on Raspberry Pi 4 as follows: https://qengineering.eu/install-tensorflow-2-lite-on-raspberry-pi-4.html

It's about to build TensorFlow Lite static library in version 2.4 :

# the tools needed

Wednesday, June 8, 2022

[Raspberry Pi] Install TensorFlow 2.2 and OpenCV 4.4.0 on Raspberry Pi 4 and use Neural Compute Stick 2


So far as we have known that Raspberry Pi 4, which is based on ARMv7 Processor rev 3 (v7l), has much more CPU computing power than previous generations. Neural Compute Stick 2(NCS 2) is a Plug and Play Development Kit for AI Inferencing via USB. Fortunately, I have both of them. Because of that, I was just wondering how to use them at the same time. The first idea coming to my mind is about AI inferencing. If we can have Tensorflow installed on it and do inferencing using NCS 2, that will be great. 



Friday, May 27, 2022

[Golang] Golang with Cgo 動態連結(dynamic linking) 函式庫範例與筆記 in Linux environment

之前曾經動手實作並測試Golang with Cgo 動態連結(dynamic linking) 與 靜態連結(static linking)函式庫範例用在Windows環境,相關內容整理在這篇:

[Golang] Golang with Cgo 動態連結(dynamic linking) 與 靜態連結(static linking)函式庫範例與筆記 in Windows environment

最近看到一篇 "最简单的cgo示例",既簡單且完整的示範了Golang with Cgo 動態連結(dynamic linking) 函式庫範例在Linux環境,個人將其改寫並放到github上: 

Wednesday, May 25, 2022

[Golang] Golang應用程式使用TensorFlow/TensorFlow Lite(TFLite)/Tensorflow Serving 的方法整理

Golang應用程式使用TensorFlow 或是 Tensorflow Lite(TFLite) 的前提是必須要有Tensorflow C 函式庫 或是 TensorFlow Lite C 函式庫,一般來說,比較少情況會是用Golang應用程式使用TensorFlow透過TensorFlow C 函式庫,因為未經過最佳化而效能不佳。Golang應用程式使用TensorFlow Lite(TFLite) 透過TensorFlow Lite C 函式庫會是效能較好的其中一種方式。以下將整理相關資訊來說明:

Tuesday, May 17, 2022

[Offensive Security] eBPF、K8S與Offensive Security相關議題之研究

 資安議題已經是越來越火熱的項目,本篇主要目的是進行eBPF、K8S與Offensive Security相關議題之研究,以便於掌握目前之發展狀況。

[Surftrace] 開源項目Surftrace,基於libbpf的ftrace加強版

 Surftrace 是由系統運維SIG 推出的一個ftrace 封裝器和開發編譯平台,讓用戶既能基於libbpf 快速構建工程進行開發,也能作為ftrace 的封裝器進行trace 命令編寫。

Surftrace 在網絡層面的增強,使得用戶只需要有相關的網絡基礎和一定的內核知識儲備,就可以用較低編碼工作量達到精準追踪網絡報文在Linux 內核的完整處理過程。適合用於追踪Linux 內核協議棧代碼、定位深層次網絡問題。