在 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。这两条规则的目标都是服务的公共 IP 和端口 4321。规则 400 将允许访问服务标签 ServiceFabric,而规则 401 将拒绝访问服务标签 Internet。
规则将按照 500、401 和 400 的顺序进行评估,因此最终只有 Service Fabric 能够访问该端口。规则 400 和 401 不是由 Azure 创建的,因此它们不会更改。