mirror of
https://github.com/alibaba/higress.git
synced 2026-06-09 20:57:32 +08:00
Fix destination rule issues (#282)
This commit is contained in:
@@ -192,8 +192,8 @@ func (h *AnnotationHandlerManager) ApplyRoute(route *networking.HTTPRoute, confi
|
||||
}
|
||||
}
|
||||
|
||||
func (h *AnnotationHandlerManager) ApplyTrafficPolicy(trafficPolicy *networking.TrafficPolicy_PortTrafficPolicy, config *Ingress) {
|
||||
func (h *AnnotationHandlerManager) ApplyTrafficPolicy(trafficPolicy *networking.TrafficPolicy, portTrafficPolicy *networking.TrafficPolicy_PortTrafficPolicy, config *Ingress) {
|
||||
for _, handler := range h.trafficPolicyHandlers {
|
||||
handler.ApplyTrafficPolicy(trafficPolicy, config)
|
||||
handler.ApplyTrafficPolicy(trafficPolicy, portTrafficPolicy, config)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,5 +38,5 @@ type RouteHandler interface {
|
||||
|
||||
type TrafficPolicyHandler interface {
|
||||
// ApplyTrafficPolicy parsed ingress annotation config reflected on traffic policy
|
||||
ApplyTrafficPolicy(trafficPolicy *networking.TrafficPolicy_PortTrafficPolicy, config *Ingress)
|
||||
ApplyTrafficPolicy(trafficPolicy *networking.TrafficPolicy, portTrafficPolicy *networking.TrafficPolicy_PortTrafficPolicy, config *Ingress)
|
||||
}
|
||||
|
||||
@@ -136,14 +136,16 @@ func (l loadBalance) Parse(annotations Annotations, config *Ingress, _ *GlobalCo
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l loadBalance) ApplyTrafficPolicy(trafficPolicy *networking.TrafficPolicy_PortTrafficPolicy, config *Ingress) {
|
||||
func (l loadBalance) ApplyTrafficPolicy(trafficPolicy *networking.TrafficPolicy, portTrafficPolicy *networking.TrafficPolicy_PortTrafficPolicy, config *Ingress) {
|
||||
loadBalanceConfig := config.LoadBalance
|
||||
if loadBalanceConfig == nil {
|
||||
return
|
||||
}
|
||||
|
||||
var loadBalancer *networking.LoadBalancerSettings
|
||||
|
||||
if loadBalanceConfig.cookie != nil {
|
||||
trafficPolicy.LoadBalancer = &networking.LoadBalancerSettings{
|
||||
loadBalancer = &networking.LoadBalancerSettings{
|
||||
LbPolicy: &networking.LoadBalancerSettings_ConsistentHash{
|
||||
ConsistentHash: &networking.LoadBalancerSettings_ConsistentHashLB{
|
||||
HashKey: &networking.LoadBalancerSettings_ConsistentHashLB_HttpCookie{
|
||||
@@ -171,18 +173,25 @@ func (l loadBalance) ApplyTrafficPolicy(trafficPolicy *networking.TrafficPolicy_
|
||||
},
|
||||
}
|
||||
}
|
||||
trafficPolicy.LoadBalancer = &networking.LoadBalancerSettings{
|
||||
loadBalancer = &networking.LoadBalancerSettings{
|
||||
LbPolicy: &networking.LoadBalancerSettings_ConsistentHash{
|
||||
ConsistentHash: consistentHash,
|
||||
},
|
||||
}
|
||||
} else {
|
||||
trafficPolicy.LoadBalancer = &networking.LoadBalancerSettings{
|
||||
loadBalancer = &networking.LoadBalancerSettings{
|
||||
LbPolicy: &networking.LoadBalancerSettings_Simple{
|
||||
Simple: loadBalanceConfig.simple,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
if trafficPolicy != nil {
|
||||
trafficPolicy.LoadBalancer = loadBalancer
|
||||
}
|
||||
if portTrafficPolicy != nil {
|
||||
portTrafficPolicy.LoadBalancer = loadBalancer
|
||||
}
|
||||
}
|
||||
|
||||
func isCookieAffinity(annotations Annotations) bool {
|
||||
|
||||
@@ -229,7 +229,7 @@ func TestLoadBalanceApplyTrafficPolicy(t *testing.T) {
|
||||
|
||||
for _, inputCase := range inputCases {
|
||||
t.Run("", func(t *testing.T) {
|
||||
loadBalance.ApplyTrafficPolicy(inputCase.input, inputCase.config)
|
||||
loadBalance.ApplyTrafficPolicy(nil, inputCase.input, inputCase.config)
|
||||
if !reflect.DeepEqual(inputCase.input, inputCase.expect) {
|
||||
t.Fatal("Should be equal")
|
||||
}
|
||||
|
||||
@@ -75,6 +75,20 @@ func (u upstreamTLS) Parse(annotations Annotations, config *Ingress, _ *GlobalCo
|
||||
}
|
||||
}
|
||||
|
||||
if sslVerify, err := annotations.ParseStringASAP(proxySSLVerify); err == nil {
|
||||
if OnOffRegex.MatchString(sslVerify) {
|
||||
upstreamTLSConfig.SSLVerify = onOffToBool(sslVerify)
|
||||
}
|
||||
}
|
||||
|
||||
upstreamTLSConfig.SNI, _ = annotations.ParseStringASAP(proxySSLName)
|
||||
|
||||
if enableSNI, err := annotations.ParseStringASAP(proxySSLServerName); err == nil {
|
||||
if OnOffRegex.MatchString(enableSNI) {
|
||||
upstreamTLSConfig.EnableSNI = onOffToBool(enableSNI)
|
||||
}
|
||||
}
|
||||
|
||||
secretName, _ := annotations.ParseStringASAP(proxySSLSecret)
|
||||
namespacedName := util.SplitNamespacedName(secretName)
|
||||
if namespacedName.Name == "" {
|
||||
@@ -86,32 +100,19 @@ func (u upstreamTLS) Parse(annotations Annotations, config *Ingress, _ *GlobalCo
|
||||
}
|
||||
upstreamTLSConfig.SecretName = namespacedName.String()
|
||||
|
||||
if sslVerify, err := annotations.ParseStringASAP(proxySSLVerify); err == nil {
|
||||
if OnOffRegex.MatchString(sslVerify) {
|
||||
upstreamTLSConfig.SSLVerify = onOffToBool(sslVerify)
|
||||
}
|
||||
}
|
||||
|
||||
upstreamTLSConfig.SNI, _ = annotations.ParseStringASAP(proxySSLName)
|
||||
|
||||
if enableSNI, err := annotations.ParseStringASAP(proxySSLServerName); err == nil {
|
||||
if OnOffRegex.MatchString(enableSNI) {
|
||||
upstreamTLSConfig.SSLVerify = onOffToBool(enableSNI)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u upstreamTLS) ApplyTrafficPolicy(trafficPolicy *networking.TrafficPolicy_PortTrafficPolicy, config *Ingress) {
|
||||
func (u upstreamTLS) ApplyTrafficPolicy(trafficPolicy *networking.TrafficPolicy, portTrafficPolicy *networking.TrafficPolicy_PortTrafficPolicy, config *Ingress) {
|
||||
if config.UpstreamTLS == nil {
|
||||
return
|
||||
}
|
||||
|
||||
upstreamTLSConfig := config.UpstreamTLS
|
||||
|
||||
var connectionPool *networking.ConnectionPoolSettings
|
||||
if isH2(upstreamTLSConfig.BackendProtocol) {
|
||||
trafficPolicy.ConnectionPool = &networking.ConnectionPoolSettings{
|
||||
connectionPool = &networking.ConnectionPoolSettings{
|
||||
Http: &networking.ConnectionPoolSettings_HTTPSettings{
|
||||
H2UpgradePolicy: networking.ConnectionPoolSettings_HTTPSettings_UPGRADE,
|
||||
},
|
||||
@@ -125,8 +126,14 @@ func (u upstreamTLS) ApplyTrafficPolicy(trafficPolicy *networking.TrafficPolicy_
|
||||
} else if isHTTPS(upstreamTLSConfig.BackendProtocol) {
|
||||
tls = processSimple(config)
|
||||
}
|
||||
|
||||
trafficPolicy.Tls = tls
|
||||
if trafficPolicy != nil {
|
||||
trafficPolicy.ConnectionPool = connectionPool
|
||||
trafficPolicy.Tls = tls
|
||||
}
|
||||
if portTrafficPolicy != nil {
|
||||
portTrafficPolicy.ConnectionPool = connectionPool
|
||||
portTrafficPolicy.Tls = tls
|
||||
}
|
||||
}
|
||||
|
||||
func processMTLS(config *Ingress) *networking.ClientTLSSettings {
|
||||
|
||||
@@ -47,6 +47,7 @@ func TestUpstreamTLSParse(t *testing.T) {
|
||||
SSLVerify: true,
|
||||
SNI: "SSLName",
|
||||
SecretName: "namespace/SSLSecret",
|
||||
EnableSNI: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -60,9 +61,10 @@ func TestUpstreamTLSParse(t *testing.T) {
|
||||
},
|
||||
expect: &UpstreamTLSConfig{
|
||||
BackendProtocol: "HTTP2",
|
||||
SSLVerify: false,
|
||||
SNI: "",
|
||||
SSLVerify: true,
|
||||
SNI: "SSLName",
|
||||
SecretName: "",
|
||||
EnableSNI: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -143,7 +145,7 @@ func TestApplyTrafficPolicy(t *testing.T) {
|
||||
|
||||
for _, testCase := range testCases {
|
||||
t.Run("", func(t *testing.T) {
|
||||
parser.ApplyTrafficPolicy(testCase.input, testCase.config)
|
||||
parser.ApplyTrafficPolicy(nil, testCase.input, testCase.config)
|
||||
if diff := cmp.Diff(testCase.expect, testCase.input); diff != "" {
|
||||
t.Fatalf("TestApplyTrafficPolicy() mismatch (-want +got): \n%s", diff)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user