Alan's BLOG
  • archives
  • posts
  • tags
  • about
  • quote
  • search
Home

Posts

Kubernetes憑證過期:Unable To Connect To The Server: X509: Certificate Has Expired Or Is Not Yet Valid

👨‍💻簡介 今天早上在下kubectl get pods時,突然跳出了以下錯誤 warning Unable to connect to the server: x509: certificate has expired or is not yet valid 下了kubeadm alpha certs check-expiration之後才發現原來是憑證過期 因此紀錄一下解決過程 Information environment NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7" docker version Client: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64 Go version: go1.10.3 Git commit: 64e9980/1.13.1 Built: Wed Jul 1 14:56:42 2020 OS/Arch: linux/amd64 Server: Version: 1....

2023-07-27 · 4 min · 759 words · Alan

WSL環境下使用websocket連線被拒

👨‍💻簡介 因在wsl環境下使用websocket通訊協議,並在windows使用postman發生連線被拒 嘗試了localhost與127.0.0.1都無效,爬文後找到了一些解決辦法,這邊簡單紀錄一下 使用wsl的vm ip 建立一組新的wsl ip 操作系統(Operating System) Windows/WSL2 Postman 版本 10.16 💡解決辦法 1. 使用WSL的VM IP 可透過以下指令查看IP位址 ip add | grep "eth0" wsl hostname -I 2. 建立一組新的WSL VM IP 在wsl建立一組新的ip,在wsl terminal執行 sudo ip addr add 192.168.99.2/24 broadcast 192.168.99.255 dev eth0 label eth0:1 這行指令將會創建一組新的ip 192.168.99.2 給wsl。 在windows建立一組新的interface,可在windows command prompt 或 powershell執行 netsh interface ip add address "vEthernet (WSL)" 192.168.99.1 255.255.255.0 這行指令將會創建一組新的interface叫vEthernet (WSL)並分配到ip為192.168.99.1,可透過netsh interface ip show addresses查看是否建立成功。 📚Reference Cannot connect to websocket server running on WSL via “localhost” · Issue #11204 · postmanlabs/postman-app-support (github....

2023-07-27 · 1 min · 83 words · Alan

Zeabur - 部署服務 從未如此簡單

👨‍💻簡介 《 Zeabur - 部署服務 從未如此簡單》 從來沒想過部署可以如此的方便快速,第一次接觸到Zeabur的時候覺得他跟一般的雲端服務商差不多,架設網站用個vm之類的,但仔細去摸索後才發現他是個想讓開發人員專注在寫扣這件事上,不需去管任何infra相關事項的一個服務,像是架設wordpress需要sql,就簡單的點兩下即可完成, 或是自己建立在github的部落格,也是一鍵點擊下去建立,並且厲害的是能自動識別github部落格的類型,主流的hexo、hugo都能自動辨識。 在介面上則是將一個專案用到的服務集中式的管理,Zeabur能夠全部部署在一起,不需去處理連線的問題,在一個單一的組態檔案中來管理服務所需的所有變數,不需要使用.env下去做設定,讓使用者有開箱即用的一流體驗。 今天就用Zeabur來快速建立wordpress,讓大家看看Zeabur的使用方式。 🔰基礎介紹 Zeabur 簡介 Zeabur 是一個主打「一鍵部署」的 PaaS 平台,類似的產品台灣的開發者一般比較流行使用 GitHub Pages(前端)以及 Render、Flyio(後端),Zeabur 相比於這些競爭對手,最大的特點在於: 官方文件、技術支援都有中文 ,且主機位於 GCP 台灣機房 操作更簡單,把 GitHub 上面的程式部署上線真的只需要「一鍵」 一個專案往往會有前端、後端、資料庫 … 各種服務,Zeabur 能夠全部部署在一起,方便管理 🎯setup 1. 建立project 登入官網後先點選Create Project來建立一個專案,接著輸入專案名稱並點選create 建立成功就會在主控台看到剛剛建立的專案了,我們點選剛剛建立的專案來繼續建立我們需要的服務 2. 建立service 點選Add Service 2.1 新增mysql service 因為wordpress需要連接mysql,因此我們先建立mysql服務 點下去等個幾秒mysql就建立好了,就是這麼的方便快速 2.2 新增wordpress database 接著我們點選Connect透過terminal連接到mysql去建立資料庫 建立完成後接著回到專案底下來繼續新增我們的wordpress服務 2.3 新增wordpress service 到這一步wordpress已完成建立 2.4 建立wordpress domain 建立完成後來接著建立domain 點選我們剛剛建立成功的domain來訪問我們的wordpress,點開後就會顯示wordpress的相關設定 2.5 設定wordpress後台 看到這個畫面就代表我們的wordpress已經設定完成了 登入後即可進入到wordpress的後台 點選左上角即可訪問我們的網站 以上就是使用zeabur來架設wordpress的設定過程,統整下來真的都是靠點選來建立所需的服務,並且服務是集中式的管理,也因為架設的主機是在GCP的台灣機房,因此速度體驗上也是沒什麼問題,並且官方有提供免費方案可以提供使用者進行免費試用,有興趣的人可以去嚐鮮體驗看看一建部署的強大威力🤓 📚Reference 🔗官方網站 -> Zeabur - Deploying your service with one click 🔗Github -> Zeabur (github....

2023-07-23 · 1 min · 82 words · Alan

Kubernetes ConfigMap

甚麼是Kubernetes ConfigMap ConfigMap主要功用是儲存我們服務的設定,這使得我們可以將我們的應用服務具備可移植性,當需要相對應的環境參數時,只需要修改ConfigMap,而不需要去更動到image即可更換成新的部屬環境。 為甚麼需要ConfigMap 最主要的用意是共享相同設定。在初期開發時可能只有幾個服務而直接把設定檔寫死,如果在後期變成微服務的架構下,上百個服務都有自己的設定檔在日後維護下會顯得麻煩,因此有了ConfigMap的出現,幫助我們將環境變數與容器鏡像解藕,便於修改應用設定,減少維護成本 何時使用ConfigMap,ConfigMap使用場景 ConfigMap通常儲存服務的環境變數、命令行參數、配置文件等非機密資料,使用場景有設定檔與容器鏡像分離、多環境支持、共享設定、動態設定更新等等 ConfigMap有哪些特點 解藕配置 -> 將服務的設定檔與容器鏡像分離,使服務在不重新建置新的容器鏡像可修改和管理設定檔,提高容器鏡像的通用性和靈活性 靈活性 -> ConfigMap支援多種格式,並且需要時可動態更新設定,無須重啟服務或重新佈署容器 共享設定 -> ConfigMap允許多個Pod共享同一份設定檔,確保了使用相同設定檔的Pod的一致性,提高設定的可維護性和一致性 集中管理 -> ConfigMap在K8s集群中可以集中管理所有的ConfigMap,不需要逐個修改Pod的設定 如何撰寫使用ConfigMap 創建ConfigMap Imperative(命令式) --from-literal kubectl create configMap myconfig --from-literal=k1=v1 --from-literal=k2=v2 --from-file kubectl create configMap myconfigfromkey --from-file=fromfilekey=from-key Declarative(聲明式) apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very 使用ConfigMap 使用ConfigMap定義容器環境變量 從單一ConfigMap定義容器環境變量 ConfigMap ## create configmap kubectl create configmap special-config --from-literal=special.how=very Pod apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: registry....

2023-07-18 · 4 min · 709 words · Alan

Kubernetes Deployment:Overview

什麼是 Kubernetes Deployment? 一樣先來個官網解說 A Deployment provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment, and the Deployment Controller changes the actual state to the desired state at a controlled rate. You can define Deployments to create new ReplicaSets, or to remove existing Deployments and adopt all their resources with new Deployments. 跟ReplicaSet不同,Deployment的工作主要是為 pod & replicaset 提供了一個宣告式的設定 & 更新方式,透過定義 desired status,Deployment controller 會在所謂的 controlled rate 下達到使用者所期望的狀態,這些機制是由 k8s 自動化完成,因此官方建議應該透過 Deployment 來佈署 pod & replicaset。...

2023-05-30 · 3 min · 453 words · Alan

vscode在wsl環境下連接ssh

👨‍💻Intro 為了實現vscode在wsl環境下使用ssh連接到gce的需求,在爬文後找到一篇解法,因此記錄下來,方便日後查詢 🎯setup 建立ssh.bat檔案,並放在windows下任意位置 C:\Windows\system32\wsl.exe ssh %* vscode設定ssh.bat路徑 打開vscode的settings -> extensions -> Remote - SSH -> Remote.SSH.path將ssh.bat所在路徑貼上 透過管理員身分打開CMD建立連結 C:\Users\User>mklink /D "C:\Users\User\.ssh" "\\wsl$\Ubuntu-20.04\home\alan\.ssh" ## 成功後會顯示以下訊息 已建立 C:\Users\User\.ssh 的符號連結 <<===>> \\wsl$\Ubuntu-20.04\home\alan\.ssh 指令介紹 mklink mklink [option] Source Target mklink:建立連結 /D :連結類型為資料夾 Source:windows連結路徑 Target:wsl家目錄的.ssh資料夾 Reference Can I SSH from WSL in Visual Studio Code? - Stack Overflow Using WSL for Remote-SSH in VS Code – Zit Seng’s Blog Sync VSCode’s SSH with WSL2 – Zit Seng’s Blog Mklink 指令建立 Symbolic Link | ShunNien’s Blog

2023-05-19 · 1 min · 80 words · Alan

使用Docker安裝GitLab

GitLab不僅是一個源代碼管理工具,它還提供了一個統一的平台,將開發、運營和安全等流程整合在一起。通過GitLab,可以在單一的應用程序中進行專案計劃、源代碼管理、分支控制、CI/CD等操作。不論角色為何,GitLab提供了一個統一的資訊來源,讓你輕鬆地管理和追蹤整個開發流程。它消除了工具鏈的複雜性,提高了端到端流程的可視性,從而幫助組織更快地實現變革。 本篇文章主要紀錄使用docker建立gitlab的教學 準備環境 環境 OS Ubuntu 20.04 LTS Gitlab Gitlab-ce:15.8.0-ce.0 Docker Engine 23.0.5 安裝gitlab 在安裝之前,先講解一下gitlab有哪些重要的資料需要掛載的,主要有以下三個路徑 /var/opt/gitlab: 這個路徑主要儲存GitLab的資料。包括Git repo、用戶資料、配置文件等。掛載到本地後,即使容器發生意外被刪除或重新創建,資料也能夠得到保留,達到數據持久化。 ./gitlab/logs:/var/log/gitlab: 這個路徑主要儲存GitLab的log。log包含GitLab的運行log、錯誤log等重要資訊。掛載到本地後,方便日後查看和管理log,並進行故障排除和監控。 /etc/gitlab: 這個路徑主要儲存GitLab的設定檔,包含系統設定、用戶權限、外部整合等設定。掛載到本地後,可根據需求進行自定義調整。 講解完以上重要的掛載路徑後,接下來講解使用docker建立gitlab docker版 docker run -d \ --name gitlab \ --restart always \ --privileged \ -p 8080:80 \ -p 443:443 \ -p 22:22 \ -v ./gitlab/data:/var/opt/gitlab \ -v ./gitlab/logs:/var/log/gitlab \ -v ./gitlab/config:/etc/gitlab \ gitlab/gitlab-ce:15.8.0-ce.0 docker-compose版 先建立docker-compose.yaml 將以下內容貼上 version: "3.6" services: gitlab: image: gitlab/gitlab-ce:15.8.0-ce.0 container_name: gitlab restart: always privileged: true hostname: 'localhost' ports: - '8080:80' - '443:443' - '22:22' volumes: - '....

2023-05-19 · 1 min · 98 words · Alan

GCP Cloud NAT:Overview

服務上雲後有時會需要固定一組IP主動對外發出連線,這時要考慮安全性與獨立性的問題,在爬文後發現了GCP推出的Cloud NAT,本篇文章簡單介紹一下這個工具的使用。 什麼是Cloud NAT GCP Cloud NAT是GCP上的一種服務,它提供了一個管理和部署Google Cloud上的NAT(Network Address Translation)的解決方案。 GCP Cloud NAT能夠讓使用者在不公開VM或GKE的外網IP情況下,透過共用一組IP對外溝通,外部服務無法直接存取Cloud NAT 閘道後的任何資源,確保了服務的安全性。 什麼時候使用Cloud NAT 在需要使用私有IP地址與外網連接時,可以使用Cloud NAT。 例如:在Pod訪問外網時需要固定Public IP的情境下會使用到。 如何使用Cloud NAT 準備環境 設定gcloud至正確專案 gcloud config set project <PROJECT_ID> 建立VPC網路與子網路 建立一台無外網的vm,region選asia-east1 ,zone選asia-east1-b,網路選剛剛建立的nat-network,子網選nat-subnet-192 建立防火牆並允許35.235.240.0/20網段,允許tcp 22 port,目標為無外網的vm 到IAP頁面並選擇SSH和TCP資源設定權限 到剛剛建立的vm curl httpbin.org/ip,此時應該是無法連線到外部 設定NAT 到Cloud NAT建立NAT gateway,並選擇稍早創建的VPC以及創建Router 這時候在curl一次就會有一組對外ip了,此ip即為nat自動幫我們創建的外部ip 有了 Cloud NAT ,可以在不使用外部ip的情況下,與外網連線且同時阻擋了由外部的存取,增加了不少安全性,降低主機被攻擊的風險。 Reference Cloud NAT overview | Google Cloud Set up Cloud NAT with Compute Engine | Google Cloud 利用 Cloud NAT 維持雲端的獨立性與安全性 - PeerOne Technology 皮偶玩互動科技 - Medium

2023-04-12 · 1 min · 76 words · Alan

Kubernetes ReplicaSet:Overview

什麼是 Kubernetes ReplicaSet? 先來個官網解說 A ReplicaSet’s purpose is to maintain a stable set of replica Pods running at any given time. As such, it is often used to guarantee the availability of a specified number of identical Pods. 根據上述描述,Replica Set主要的作用是確保始終都有一定數量的相同Pod可用,保證服務的高可用性。 Kubernetes RS是Kubernetes中的一種控制器,主要用於管理Pod的複製和伸縮,確保Pod的數量。RS具有以下幾種特性 自動管理pod的副本數量:確保指定數量的Pod跟使用者所期望的一致(desired status),如果發生故障或需要擴展,它會自動創建或刪除Pod。 確保Pod的健康狀態:如果發生故障會對失敗的Pod進行重新調度 創建Pod的Template:當需要新的Pod時會根據定義的Pod Template創建 為什麼需要Replicaset? 在Kubernetes集群中,Pod的管理對於系統的可靠性和彈性至關重要。如果一個Pod發生故障,RS會自動創建一個新的Pod來代替它,確保服務繼續運行。同時,當服務需要擴展以滿足流量增加時,Kubernetes RS也可以自動創建額外的Pod。因此RS解決了以下問題: 確保服務的高可用性和可靠性:RS可以自動維護一定數量的Pod,確保服務在Pod失敗時仍然可以正常運行。 方便服務的擴展:使用RS可以根據需求調整Pod的副本數量,實現服務的快速擴展。 簡化服務管理:RS可以自動調整Pod的數量,減少手動管理的工作量。 Kubernetes Replicaset是如何運作的? 定義RS,指定所需的Pod副本數量和Pod Template,創建後,ReplicaSet使用定義好的Pod Template創建Pod,並開始監控每個Pod的狀態以及數量是否與定義的一致(desired status),如果低於指定副本數則會創建Pod,高於指定副本數則會刪除Pod,當Pod被意外刪除時會創建新的Pod來做替代。 什麼時候使用Replicaset? 使用RS通常適用於以下情況: 需要確保一定數量的Pod正在運行,以保持服務的可用性和可靠性。 需要能夠自動擴展和縮小Pod數量,以應對流量變化和其他需求。 希望能夠自動替換發生故障的Pod,以確保服務的連續運行。 需要管理一個服務的多個Pod,並且希望使用Kubernetes提供的自動化功能,例如調度、網路配置和負載平衡。 Kubernetes Replicaset有哪些特性? 高可用性:RS的目的是維護一個穩定的Pod副本集,確保始終有一定數量的相同Pod可用,從而保證服務的高可用性。 健康檢查和自動恢復:ReplicaSet可以通過定期檢查Pod副本的健康狀態來確保服務始終運行。當Pod故障或被刪除時,ReplicaSet會自動創建新的Pod來代替故障的Pod,確保服務的可用性及穩定性。 自動擴縮:RS會監視Pod副本數量,並自動創建或刪除Pod副本以確保Pod副本數量達到指定的數量。使服務可以自動擴展和縮放,以應對不同的負載。...

2023-03-06 · 1 min · 194 words · Alan

Kubernetes Service:Overview

什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是,訪問Pod用的一個Component。XD Kubernetes Service是個抽象概念,通過Service,當我們的Pod創建好後,定義訪問它們的策略,該如何去訪問一群相同邏輯的Pod,給Pod提供一組穩定的IP或是Port。 因此也可以把Service當作是一種掛在一群運行相同應用程式前面的LoadBalancer,詳見下圖。 圖片來源 為什麼需要Kubernetes Service? 因為在Kubernetes集群中,Pod的IP地址是不穩定的,可能因為重新調度或重啟Container而改變了IP。為了使其他應用程式能夠穩定地訪問Pod,需要使用Kubernetes Service。 Kubernetes Service是如何工作的? 當Pod啟動時,它們會自動註冊到Kubernetes集群中的一個服務發現機制中,例如Kubernetes DNS或etcd。Service會監聽這個服務發現機制,並根據Label Selector選擇要提供服務的Pod。 當其他應用程式需要訪問Pod時,它們可以通過Service的IP和Port進行訪問,Service會將請求根據Label Selector轉發到選定的Pod。由於Service的IP和端口是穩定的,即使Pod的IP地址發生變化,其他應用程式依然可以一直使用相同的IP和Port訪問該Pod。 圖片來源 Kubernetes Service的類型有哪些? Kubernetes Service有以下四種類型: ClusterIP: 在Kubernetes集群內部使用,通常用於應用程式的內部通訊。 NodePort: 將Pod暴露到Kubernetes集群的外部,並使用Node的IP和一個Static Port進行訪問。 LoadBalancer: LoadBalancer是ClusterIP和NodePort的一種擴展。在公有雲上使用,使用雲供應商提供的LoadBalancer將流量轉發到Service中的Pod。 ExternalName: 允許服務將外部DNS名稱映射到Kubernetes集群內部的svc名稱上。這樣可以在不修改應用程式代碼的情況下實現外部服務的訪問。 圖片來源 Kubernetes Service有哪些功能? Kubernetes Service具有以下功能: 透明地將請求轉發到Pod中,無需修改應用程式代碼。 提供負載均衡,分散流量到多個Pod中。 支持多種協議,例如TCP、UDP和HTTP。 可以設置Session Affinity,將請求路由到相同的Pod。 可以進行Port轉發,將請求轉發到Pod中的不同Port。 支持跨命名空間訪問。 如何創建和管理Kubernetes Service: 要創建 Kubernetes Service,可以使用以下兩種方式: 宣告式(Declarative) kind: Service apiVersion: v1 metadata: name: my-service spec: # type 一共有四種(ClusterIP, NodePort, LoadBalancer, ExternalName),預設是 ClusterIP type: ClusterIP # 選擇帶有 "app=MyApp" 的 pod selector: app: MyApp # Service 實際對外服務的設定 ports: # 使用的協定與port,預設為TCP - protocol: TCP port: 80 # Pod對外開放的port,如無設定,預設與spec....

2023-03-03 · 1 min · 188 words · Alan
« Prev  Next  »
© 2024 艾倫的程式之旅 Powered by Hugo & PaperMod