跳到主要內容

發表文章

目前顯示的是 2024的文章

Kubernetes中的TLS應用

  Kubernetes中的TLS應用 隨著資訊傳遞速度的快速增加和數據的廣泛使用,保障資料安全性已成為一個至關重要的議題。特別是在大規模應用中,例如容器化環境下的 Kubernetes(k8s)集群,通信安全性無疑是一個極為重要的環節。而透過 Transport Layer Security(TLS)技術的應用,我們能夠有效地保障通信的安全性。 Transport Layer Security(TLS)技術的應用 在資訊傳輸中,若敏感資料如使用者帳號和密碼以明文形式傳送,這對駭客來說是易於竊取的。因此,我們採用加密技術來保護這些敏感資訊,將其加密後再傳送給伺服器進行解密(即對稱加密)。 然而,在傳送加密金鑰的過程中,金鑰本身可能被竊取,這樣一來駭客就有可能用偷來的金鑰來解密敏感資訊。為了解決此問題,伺服器會生成一對公鑰(Public Key)和私鑰(Private Key)。公鑰會傳送給瀏覽器,瀏覽器使用公鑰將金鑰加密後再傳送回伺服器。伺服器可以使用私鑰解密獲取金鑰,這樣一來就能保障金鑰在傳遞過程中的安全性(即非對稱加密)。 然而,即使使用了非對稱加密,駭客仍然有可能透過釣魚網站的方式誘使使用者交出金鑰,因此我們需要確認連線對象是否是合法的網站。 建立連線時,瀏覽器會要求伺服器提供證書以驗證其身份。此證書包含了伺服器的公鑰以及發行機構的訊息。通過驗證這個證書,我們可以確認公鑰的合法性,從而判斷連線對象是否是合法的網站。 然而,駭客也有可能偽造證書,因此為了避免這種情況的發生,各個證書授權機構會生成一對公私鑰。在發出證書之前,證書授權機構會使用私鑰對證書進行加密。這樣一來,瀏覽器在獲得證書後可以使用內建的公鑰對其進行解密,以驗證證書的合法性。 TLS 在 Kubernetes 中的重要性 在 Kubernetes 集群中,無論是 API Server、Pod 之間的通信,還是其他組件之間的通信,都需要得到安全保護。TLS 技術的應用使得這些通信變得安全可靠,有效地防止了敏感信息的泄露和不良攻擊的發生。 為了識別各個元件的身份,我們在 Kubernetes 環境中設置了相應的 client certificate 和 server certificate。 舉例來說,System admin user、Kube Scheduler、Kube Controll Mana

Kubernetes 系統中 ETCD 備份還原教學

Kubernetes 系統中 ETCD 備份還原教學 在 Kubernetes 系統中,ETCD 是一個關鍵的組件,負責存儲系統中的所有配置資料。為了確保在災難發生時可以快速恢復系統狀態,定期備份和還原 ETCD 是至關重要的。以下是一個簡單的教學,介紹了如何在 Kubernetes 系統中進行 ETCD 的備份和還原。 備份 ETCD 1. 使用以下指令查找 ETCD 對外的連接端點: bash kubectl describe pods -n kube-system etcd-controlplane | grep advertise-client-urls    獲取到 Endpoint,例如:https://10.1.218.16:2379。 2. 使用以下指令查找憑證位置: bash kubectl describe pods -n kube-system etcd-controlplane | grep pki    確定憑證位置,例如:    - Cert File: /etc/kubernetes/pki/etcd/server.crt    - Key File: /etc/kubernetes/pki/etcd/server.key    - CA Cert File: /etc/kubernetes/pki/etcd/ca.crt 3. 使用以下指令備份 ETCD 資料庫: bash ETCDCTL_API=3 etcdctl \ --endpoints=https://10.1.220.8:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key snapshot save /opt/cluster1.db 還原 ETCD 1. 使用以下指令還原 ETCD 資料庫: bash ETCDCTL_API=3 etcdctl \ --endpoints=https://10.1.220.8:2379 \ --cacert=/etc/etcd/pki/ca.pem \ --cert=/etc/etcd/pki/etcd.pem

深入理解 Docker 網路設置:Bridge 模式原理與實現

深入理解 Docker 網路設置:Bridge 模式原理與實現 在使用 Docker 建立容器並指定網路為 Bridge 模式時,Docker 使用了多項技術來實現容器與Host的網路通信。以下將深入探討這些技術的原理以及如何實現,幫助大家更好地理解 Docker 網路設置。 使用 Veth Pair 實現容器與Host的通信 Docker 在建立容器時使用了 veth pair 技術。這是一種在容器的 Network Namespace 和Host之間建立虛擬網路介面的方法。其中一端連接到容器的 Network Namespace 中,另一端連接到Host的 docker0 介面(虛擬交換機),從而實現容器與 Host 的網路通信。 bash # Docker 在安裝過程中會建立一個 docker0 的網路介面 ip link add docker0 type bridge # 設定作為 Network Namespace 與Host通訊的 Gateway IP ip addr add 172.17.0.1/16 dev docker0 做完以上的動作後,會生成 172.17.0.0/16 的網路環境,接下來 Docker 會執行以下的動作,將容器的網路與 Host 間的網路通道給建立起來: 1. 創建 Veth Pair: bash # Docker 在安裝過程中會建立一個 docker0 的網路介面 ip link add eth0@if? type veth peer name veth????@if? 其中,eth0@if? 是容器內的網路介面名稱,veth????@if? 則是連接到 Host 的虛擬交換機(docker0)的介面名稱。(? 是一串隨機字元) 2. 將網路介面(eth0@if?)加入容器的 Network Namespace 中: bash ip link set eth0@if? netns ${CONTAINER-NAMESPACE} 3. 將另一端的介面(veth????@if?) 加入到 Host 的虛擬交換機(docker0)中: bash ip link set veth????@if? master docker0 4. 在容器的 Network Namespace 中,為 eth0@if? 介面設置 IP 地

How to use a Google Cloud Persistent Disk (PD) as a Persistent Volume (PV) in Kubernetes

  How to use a Google Cloud Persistent Disk (PD) as a Persistent Volume (PV) in Kubernetes 什麼是 Persistent Volume(PV) Persistent Volume(PV)是 Kubernetes 中用來管理儲存資源的抽象化物件。系統管理員可以透過 PV 來管理集群中的實體儲存媒體。 要怎麼使用 Persistent Volume (PV) 要使用 Persistent Volume(PV),首先需要宣告 Persistent Volume Claim(PVC),並透過 PVC 來要求儲存空間。一旦 PVC 被宣告,Kubernetes 就會根據 PVC 中指定的條件尋找適合的 PV 來滿足 Pod 的需求,並將 PV 掛載到 Pod 中。 在 Google Cloud 的公有雲服務裡提供了一種叫做 Cloud Persistent Disk 的服務,它是一種持久性的存儲解決方案,可供 Kubernetes 中的應用程式使用。若想要在 Kubernetes 中使用 Cloud Persistent Disk 作為 Persistent Volume(PV),可參考以下作法: 方法一 Static Provisioning: 在 GCP 上建立 Cloud Persistent Disk(PD): bash gcloud compute disks create my-disk --size=10GB --zone=us-central1-a 建立 PersistentVolume (PV) YAML: yaml apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain gcePersistentDisk: pdName: my-disk fsType: ext4 建立 PersistentVolumeClaim (PVC) YAML: yaml apiVersi