Auf AKS habe ich einen Dienst vom Typ LoadBalancer mit 2 definierten Ports, einen für den allgemeinen Zugriff (und bidirektionale Authentifizierung) und den anderen für den exklusiven Zugriff von einem Service Fabric-Cluster, ebenfalls auf Azure. Um den exklusiven Zugriff zu erreichen, habe ich die eingehende Regel auf den VMs geändert, um nur dem SF-Cluster den Zugriff zu erlauben. Das Problem ist, dass ich oft sehe, dass die Regel auf den Standardwert zurückgesetzt wird, vermutlich aufgrund einer Bereitstellung, die den AKS-Dienst von Azure DevOps ändert (obwohl sich das LoadBalancer-Objekt nie ändert).
Die LoadBalancer-Konfiguration sieht folgendermaßen aus:
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
Eine mögliche Problemumgehung besteht darin, die zulässige IP zum LoadBalancer-Objekt hinzuzufügen, wie hier empfohlen:https://github.com/Azure/AKS/issues/570#issuecomment-413299212, aber in meinem Fall wird dadurch auch der „öffentliche Port“ eingeschränkt.
Ich kann mir keinen anderen Ausweg vorstellen, als zwei LoadBalancer-Objekte zu erstellen, eines pro Port. Aber das ist kein sauberer Workaround, denn: Der Dienst ist derselbe, nur über zwei verschiedene Ports, und auf diese Weise hätte ich zwei IPs für denselben Dienst. Außerdem und wie im obigen Link erwähnt, sollten Änderungen an den eingehenden Regeln dauerhaft sein.
Gibt es eine andere Problemumgehung? Vielen Dank im Voraus für alle Informationen.
Antwort1
Ich habe die gleiche Frage in StackOverflow gestellt und auch dort geantwortet:https://stackoverflow.com/a/61696167/6860266
Wie in der anderen Antwort erwähnt, bestand die Lösung darin, der Netzwerksicherheitsgruppe neue Regeln mit einer höheren Priorität als die vorhandenen hinzuzufügen.
Beispielsweise erstellt der obige LoadBalancer-Dienst eine Regel für TCP-Port 4321, die es jeder Internetquelle ermöglicht, auf diesen Port über die dem Dienst zugewiesene öffentliche IP zuzugreifen. Nehmen wir an, die dieser Regel zugewiesene Priorität ist 500. Ich kann diese Regel ändern, aberes wird später zurückgesetzt.
Ich muss zwei weitere Regeln mit höheren Prioritäten hinzufügen, sagen wir 400 und 401. Beide Regeln haben als Ziel die öffentliche IP des Dienstes und Port 4321. Regel 400 erlaubt den Zugriff auf das Service Tag ServiceFabric, während Regel 401 den Zugriff auf das Service Tag Internet verweigert.
Regeln werden in der Reihenfolge 500, 401 und 400 ausgewertet, sodass letztendlich nur Service Fabric auf diesen Port zugreifen kann. Die Regeln 400 und 401 werden nicht von Azure erstellt und ändern sich daher nicht.