mirror of
https://github.com/alibaba/higress.git
synced 2026-06-09 12:47:28 +08:00
fix multi namespace problem (#20)
This commit is contained in:
@@ -111,7 +111,7 @@ clean-istio:
|
|||||||
rm -rf external/istio
|
rm -rf external/istio
|
||||||
|
|
||||||
clean-gateway: clean-istio
|
clean-gateway: clean-istio
|
||||||
rm -rf external/envoy
|
rm -rf external/envoy
|
||||||
rm -rf external/proxy
|
rm -rf external/proxy
|
||||||
rm external/package/envoy.tar.gz
|
rm external/package/envoy.tar.gz
|
||||||
|
|
||||||
|
|||||||
189
istio/1.12/patches/istio/20221103-fix-multi-namespace.patch
Normal file
189
istio/1.12/patches/istio/20221103-fix-multi-namespace.patch
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
diff --git a/pilot/docker/Dockerfile.pilot b/pilot/docker/Dockerfile.pilot
|
||||||
|
index 601d78d12a..4a63a71ff5 100644
|
||||||
|
--- a/pilot/docker/Dockerfile.pilot
|
||||||
|
+++ b/pilot/docker/Dockerfile.pilot
|
||||||
|
@@ -25,6 +25,8 @@ COPY gcp_envoy_bootstrap.json /var/lib/istio/envoy/gcp_envoy_bootstrap_tmpl.json
|
||||||
|
|
||||||
|
COPY higress-pilot-start.sh /usr/local/bin/higress-pilot-start.sh
|
||||||
|
|
||||||
|
+RUN chmod +x /usr/local/bin/higress-pilot-start.sh
|
||||||
|
+
|
||||||
|
USER 1337:1337
|
||||||
|
|
||||||
|
ENTRYPOINT ["/usr/local/bin/higress-pilot-start.sh"]
|
||||||
|
diff --git a/pilot/pkg/model/ali_push_context.go b/pilot/pkg/model/ali_push_context.go
|
||||||
|
index 459bd78469..55ba7331e0 100644
|
||||||
|
--- a/pilot/pkg/model/ali_push_context.go
|
||||||
|
+++ b/pilot/pkg/model/ali_push_context.go
|
||||||
|
@@ -1,6 +1,7 @@
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
+ "path"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
@@ -123,7 +124,7 @@ func createCRName(clusterId, autoGenerated string) string {
|
||||||
|
|
||||||
|
// virtualServiceFilter will modify copied configs from underlying store.
|
||||||
|
// We merge routes into pre host of virtual service.
|
||||||
|
-func virtualServiceFilter(configs []config.Config) []config.Config {
|
||||||
|
+func VirtualServiceFilter(configs []config.Config) []config.Config {
|
||||||
|
var autoGenerated []*config.Config
|
||||||
|
configsForName := make(map[string]*config.Config, len(configs))
|
||||||
|
|
||||||
|
@@ -134,7 +135,7 @@ func virtualServiceFilter(configs []config.Config) []config.Config {
|
||||||
|
if strings.HasPrefix(c.Name, constants.IstioIngressGatewayName) {
|
||||||
|
autoGenerated = append(autoGenerated, &c)
|
||||||
|
} else {
|
||||||
|
- configsForName[c.Name] = &c
|
||||||
|
+ configsForName[path.Join(c.Namespace, c.Name)] = &c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -142,7 +143,7 @@ func virtualServiceFilter(configs []config.Config) []config.Config {
|
||||||
|
|
||||||
|
for _, c := range autoGenerated {
|
||||||
|
targetName := createCRName(istioClusterId, c.Name)
|
||||||
|
- rawVS, exist := configsForName[targetName]
|
||||||
|
+ rawVS, exist := configsForName[path.Join(c.Namespace, targetName)]
|
||||||
|
if exist {
|
||||||
|
vs := rawVS.Spec.(*networking.VirtualService)
|
||||||
|
autoGeneratedVS := c.Spec.(*networking.VirtualService)
|
||||||
|
@@ -155,7 +156,7 @@ func virtualServiceFilter(configs []config.Config) []config.Config {
|
||||||
|
// We change the auto-generated config name to the format of cr name same with ops when ops
|
||||||
|
// don't have this host.
|
||||||
|
c.Name = targetName
|
||||||
|
- configsForName[targetName] = c
|
||||||
|
+ configsForName[path.Join(c.Namespace, targetName)] = c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -167,7 +168,7 @@ func virtualServiceFilter(configs []config.Config) []config.Config {
|
||||||
|
}
|
||||||
|
|
||||||
|
// destinationFilter will modify copied configs from underlying store.
|
||||||
|
-func destinationFilter(configs []config.Config) []config.Config {
|
||||||
|
+func DestinationFilter(configs []config.Config) []config.Config {
|
||||||
|
var autoGenerated []*config.Config
|
||||||
|
configsForName := make(map[string]*config.Config, len(configs))
|
||||||
|
|
||||||
|
@@ -176,7 +177,7 @@ func destinationFilter(configs []config.Config) []config.Config {
|
||||||
|
if strings.HasPrefix(c.Name, constants.IstioIngressGatewayName) {
|
||||||
|
autoGenerated = append(autoGenerated, &c)
|
||||||
|
} else {
|
||||||
|
- configsForName[c.Name] = &c
|
||||||
|
+ configsForName[path.Join(c.Namespace, c.Name)] = &c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -185,12 +186,12 @@ func destinationFilter(configs []config.Config) []config.Config {
|
||||||
|
for _, c := range autoGenerated {
|
||||||
|
// DestinationRule name of ops is md5 without cluster id.
|
||||||
|
targetName := strings.TrimPrefix(c.Name, constants.IstioIngressGatewayName+"-")
|
||||||
|
- _, exist := configsForName[targetName]
|
||||||
|
+ _, exist := configsForName[path.Join(c.Namespace, targetName)]
|
||||||
|
if !exist {
|
||||||
|
// We change the auto-generated config name to the format of cr name same with ops when ops
|
||||||
|
// don't have destination rule for this service.
|
||||||
|
c.Name = targetName
|
||||||
|
- configsForName[targetName] = c
|
||||||
|
+ configsForName[path.Join(c.Namespace, targetName)] = c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -203,7 +204,7 @@ func destinationFilter(configs []config.Config) []config.Config {
|
||||||
|
|
||||||
|
// gatewayFilter will modify copied configs from underlying store.
|
||||||
|
// We merge routes into pre host of virtual service.
|
||||||
|
-func gatewayFilter(configs []config.Config) []config.Config {
|
||||||
|
+func GatewayFilter(configs []config.Config) []config.Config {
|
||||||
|
var autoGenerated []*config.Config
|
||||||
|
configsForName := make(map[string]*config.Config, len(configs))
|
||||||
|
|
||||||
|
@@ -214,7 +215,7 @@ func gatewayFilter(configs []config.Config) []config.Config {
|
||||||
|
if strings.HasPrefix(c.Name, constants.IstioIngressGatewayName) {
|
||||||
|
autoGenerated = append(autoGenerated, &c)
|
||||||
|
} else {
|
||||||
|
- configsForName[c.Name] = &c
|
||||||
|
+ configsForName[path.Join(c.Namespace, c.Name)] = &c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -222,14 +223,14 @@ func gatewayFilter(configs []config.Config) []config.Config {
|
||||||
|
|
||||||
|
for _, c := range autoGenerated {
|
||||||
|
targetName := createCRName(istioClusterId, c.Name)
|
||||||
|
- _, exist := configsForName[targetName]
|
||||||
|
+ _, exist := configsForName[path.Join(c.Namespace, targetName)]
|
||||||
|
// Note, if ops already has the host without tls and ingress has the same host with tls,
|
||||||
|
// we don't merge tls settings, i.e, we don't adopt ingress tls for this host.
|
||||||
|
if !exist {
|
||||||
|
// We change the auto-generated config name to the format of cr name same with ops when ops
|
||||||
|
// don't have this host.
|
||||||
|
c.Name = targetName
|
||||||
|
- configsForName[targetName] = c
|
||||||
|
+ configsForName[path.Join(c.Namespace, targetName)] = c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/pilot/pkg/model/push_context.go b/pilot/pkg/model/push_context.go
|
||||||
|
index b7e4957b62..89bc9e4e36 100644
|
||||||
|
--- a/pilot/pkg/model/push_context.go
|
||||||
|
+++ b/pilot/pkg/model/push_context.go
|
||||||
|
@@ -1406,7 +1406,7 @@ func (ps *PushContext) initVirtualServices(env *Environment) error {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Added by ingress
|
||||||
|
- vservices = virtualServiceFilter(vservices)
|
||||||
|
+ vservices = VirtualServiceFilter(vservices)
|
||||||
|
// End added by ingress
|
||||||
|
|
||||||
|
totalVirtualServices.Record(float64(len(virtualServices)))
|
||||||
|
@@ -1608,7 +1608,7 @@ func (ps *PushContext) initDestinationRules(env *Environment) error {
|
||||||
|
destRules[i] = configs[i].DeepCopy()
|
||||||
|
}
|
||||||
|
|
||||||
|
- destRules = destinationFilter(destRules)
|
||||||
|
+ destRules = DestinationFilter(destRules)
|
||||||
|
|
||||||
|
ps.SetDestinationRules(destRules)
|
||||||
|
return nil
|
||||||
|
@@ -1937,7 +1937,7 @@ func (ps *PushContext) initGateways(env *Environment) error {
|
||||||
|
for i := range gateways {
|
||||||
|
gateways[i] = gatewayConfigs[i].DeepCopy()
|
||||||
|
}
|
||||||
|
- gatewayConfigs = gatewayFilter(gateways)
|
||||||
|
+ gatewayConfigs = GatewayFilter(gateways)
|
||||||
|
// End added by ingress
|
||||||
|
|
||||||
|
sortConfigByCreationTime(gatewayConfigs)
|
||||||
|
diff --git a/pilot/pkg/xds/debug.go b/pilot/pkg/xds/debug.go
|
||||||
|
index ac91ef312a..a5b4ea6943 100644
|
||||||
|
--- a/pilot/pkg/xds/debug.go
|
||||||
|
+++ b/pilot/pkg/xds/debug.go
|
||||||
|
@@ -42,6 +42,7 @@ import (
|
||||||
|
v3 "istio.io/istio/pilot/pkg/xds/v3"
|
||||||
|
"istio.io/istio/pkg/config"
|
||||||
|
"istio.io/istio/pkg/config/schema/collection"
|
||||||
|
+ "istio.io/istio/pkg/config/schema/gvk"
|
||||||
|
"istio.io/istio/pkg/network"
|
||||||
|
"istio.io/istio/pkg/util/protomarshal"
|
||||||
|
istiolog "istio.io/pkg/log"
|
||||||
|
@@ -463,6 +464,16 @@ func (s *DiscoveryServer) configz(w http.ResponseWriter, req *http.Request) {
|
||||||
|
configs := make([]kubernetesConfig, 0)
|
||||||
|
s.Env.IstioConfigStore.Schemas().ForEach(func(schema collection.Schema) bool {
|
||||||
|
cfg, _ := s.Env.IstioConfigStore.List(schema.Resource().GroupVersionKind(), "")
|
||||||
|
+ // Added by ingress
|
||||||
|
+ switch schema.Resource().GroupVersionKind().String() {
|
||||||
|
+ case gvk.Gateway.String():
|
||||||
|
+ cfg = model.GatewayFilter(cfg)
|
||||||
|
+ case gvk.VirtualService.String():
|
||||||
|
+ cfg = model.VirtualServiceFilter(cfg)
|
||||||
|
+ case gvk.DestinationRule.String():
|
||||||
|
+ cfg = model.DestinationFilter(cfg)
|
||||||
|
+ }
|
||||||
|
+ // End added by ingress
|
||||||
|
for _, c := range cfg {
|
||||||
|
configs = append(configs, kubernetesConfig{c})
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user