在 AKS 上,我有一個 LoadBalancer 類型的服務,定義了 2 個端口,一個用於常規訪問(和雙向身份驗證),另一個用於從 Azure 上的 Service Fabric 集群進行獨佔訪問。為了實現獨佔訪問,我更改了虛擬機器上的入站規則,僅允許 SF 叢集存取。問題是我經常看到規則重設為預設值,可能是因為部署修改了 Azure DevOps 中的 AKS 服務(儘管 LoadBalancer 物件從未更改)
LoadBalancer 配置如下:
apiVersion: v1
kind: Service
metadata:
name: myservice-loadbalancer
spec:
ports:
- name: public-port
port: 1234
targetPort: public-port
- name: service-fabric-port
port: 4321
targetPort: service-fabric-port
selector:
app: myservice
type: LoadBalancer
一種可能的解決方法是將允許的 IP 新增至 LoadBalancer 對象,如下所示:https://github.com/Azure/AKS/issues/570#issuecomment-413299212,但就我而言,這也會限制“公共端口”。
除了建立兩個 LoadBalancer 物件(每個連接埠一個)之外,我無法想到其他方法。但這不是一個乾淨的解決方法,因為:服務僅通過兩個不同的連接埠是相同的,這樣我就可以為相同服務擁有兩個 IP。此外,正如上面連結中提到的,對入站規則的更改應該是持久的。
還有其他解決方法嗎?預先非常感謝您的任何見解。
答案1
我在 StackOverflow 上問了同樣的問題並在那裡回答了:https://stackoverflow.com/a/61696167/6860266
正如另一個答案所提到的,解決方案是在網路安全群組上新增規則,其優先順序高於現有規則。
例如,上面的 LoadBalancer 服務將為 TCP 連接埠 4321 建立一條規則,允許任何網路來源存取提供給該服務的公共 IP 上的該連接埠。假設該規則的優先順序是 500。稍後將被重置。
我必須再新增兩條具有更高優先權的規則,例如 400 和 401。服務標籤互聯網。
規則將按照 500、401 和 400 的順序進行評估,因此最終只有 Service Fabric 能夠存取該連接埠。規則 400 和 401 不是由 Azure 建立的,因此不會變更。