iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0

在第二天的文章裡,容器互相呼叫,靠著是建立共同的NetworkName:

ContainerName=a2a-web
PublishPort=8080:80
Network=a2a-net.network

在Docker的Port Mapping是HostPort:ContainerPort。
這樣若有個a2a-proxy容器要呼叫a2a-web,URL會是:http://a2a-web,是可以直接呼叫Container Port,也就是a2a-web的80 port(HTTP預設Port)。
但外部瀏覽器要開啟a2a-web,仍需用http://RedHatIP:8080呼叫,無法解析a2a-web這個domain name。


然而,看似容易設定的問題,卻有不少的額外技術債。

  1. CORS(跨來源資源共享):瀏覽器預設同源政策,禁止不同來源(協定、網域、連接埠任一不同)的網頁互相讀取資料,防止惡意網站竊取個資,而Spring Boot也有相應的作法。
  2. 憑證的問題,一個上線具HTTP功能的系統沒憑證是不合格的。
  3. 80/443 port的問題,Podman是為了rootless而生,所以使用1024以下的port號得用更曲折的方式處理,但不在這次範圍。大部份正規運行系統的客戶,很少在網路不建置F5 load balance的。

所以解決第3個問題方式就是甩鍋給F5,由F5將80 port導向a2-web的8080 port。
那第2個問題呢?若每個具HTTP功能的容器都要掛憑證就顯得很Stupid,所以前面有說要建一個a2a-proxy容器。原本可能是:

F5 -> a2a-web:8443 -> a2a-api:8081

加了a2a-proxy後會是:

F5 -> a2a-proxy:8443 -> a2a-web:80 -> a2a-proxy:8081 -> a2a-api:8081

變成憑證只掛在a2a-proxy這裡,容器之間互Call就再繞到a2a-proxy再導向目標的URL,也就經過憑證這一關。

而第一個問題,原本的a2a-api要允許a2a-web的跨源請求,就變成允許a2a-proxy的跨源請求。

所以第一個問題的CORS及第二個問題的proxy和憑證,就再後續發文講出,但還決定先寫哪一篇XD。


上一篇
Quadlet檔的ABC
系列文
Podman Quadlet-容器服務化(在單體系統到微服務之間)10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言