iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
Kubernetes

Kubernetes 中關於網路的二三事系列 第 20

Day 20 淺談Service Type:ExternalName

  • 分享至 

  • xImage
  •  

昨天我們聊了 Kubernetes 中常見的對外通訊方法,今天來談談一個比較特別的 Service Type:ExternalName。這個類型雖然不是用來對外通訊的,但在某些場景下可是個好幫手。

首先,ExternalName 是什麼?簡單來說,它就是一個 CNAME 記錄。當你創建一個 ExternalName 類型的 Service 時,Kubernetes 不會給它分配 ClusterIP,而是直接在 DNS 中創建一個 CNAME 記錄,指向你指定的外部域名。

聽起來有點抽象?來個例子就懂了。假設你有個外部的資料庫服務,地址是 db.example.com。你可以創建一個 ExternalName Service,讓集群內的應用通過 my-db.default.svc.cluster.local 來訪問這個外部資料庫。這樣一來,如果哪天資料庫地址變了,你只需要修改 Service 的配置,而不用去改應用的程式碼。

來看看怎麼創建一個 ExternalName Service:

apiVersion: v1
kind: Service
metadata:
  name: my-db
spec:
  type: ExternalName
  externalName: db.example.com

就這麼簡單!

那 ExternalName 有什麼好處呢?

  1. 解耦:應用不需要知道外部服務的實際地址,只需要知道 Kubernetes 內部的服務名。
  2. 靈活性:外部服務地址變更時,只需修改 Service 配置,不用動應用程式碼。
  3. 統一管理:可以用同樣的方式管理內部和外部服務。

但也有些限制要注意:

  1. 只支持域名,不支持 IP 地址。
  2. 不提供負載均衡或代理。
  3. 只是個 DNS CNAME,所以客戶端還是直接連接外部服務。

ExternalName 雖然看起來簡單,但在某些場景下可是個神器。比如說,你正在把應用從本地遷移到雲端,可以先用 ExternalName 指向本地服務,等遷移完成後再改指向雲端服務,整個過程應用完全不用改動。

今天的ExternalName介紹就到這裡。各位,明天見!


上一篇
Day 19 Kubernetes 對外通訊:NodePort、LoadBalancer 和 Ingress
下一篇
Day21 淺談Service Mesh - Microservices 與 Monolithic Architecture
系列文
Kubernetes 中關於網路的二三事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言