Skip to content

Commit

Permalink
Adjust deployment API & fix IngressController bug (#853)
Browse files Browse the repository at this point in the history
  • Loading branch information
xxx7xxxx committed Nov 7, 2022
1 parent b32790c commit 16469d4
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 21 deletions.
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ require (
github.com/libdns/route53 v1.3.0
github.com/libdns/vultr v0.0.0-20211122184636-cd4cb5c12e51
github.com/lucas-clemente/quic-go v0.30.0
github.com/megaease/easemesh-api v1.4.3
github.com/megaease/easemesh-api v1.4.4
github.com/megaease/grace v1.0.0
github.com/megaease/jsonschema v0.5.1
github.com/megaease/yaml v0.0.0-20220804061446-4f18d6510aed
Expand All @@ -55,7 +55,7 @@ require (
go.etcd.io/etcd/client/v3 v3.5.4
go.etcd.io/etcd/server/v3 v3.5.4
go.uber.org/zap v1.23.0
golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d
golang.org/x/crypto v0.0.0-20221012134737-56aed061732a
golang.org/x/net v0.0.0-20220919232410-f2f64ebce3c1
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10
Expand Down Expand Up @@ -248,8 +248,8 @@ require (
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
google.golang.org/api v0.81.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc // indirect
google.golang.org/grpc v1.48.0 // indirect
google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a // indirect
google.golang.org/grpc v1.50.0 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
Expand Down
16 changes: 8 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -681,8 +681,8 @@ github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpe
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/megaease/easemesh-api v1.4.3 h1:im41Z6tRDIOlHF523vd2HIOkPwgaM8r/mwRlu7YmfN8=
github.com/megaease/easemesh-api v1.4.3/go.mod h1:kDdyxduq+K9FL/KvShLvGvrXfYEWZMTteFCSLka2h+0=
github.com/megaease/easemesh-api v1.4.4 h1:E18mtLfj8ffuPTeN7MqZeakJgT/tJ92JNIZsY2k2GE0=
github.com/megaease/easemesh-api v1.4.4/go.mod h1:GuAE5DwqK6lI/ovoRKjyPxBCSoMhj0NLp9PRejj0Hnw=
github.com/megaease/grace v1.0.0 h1:b44R3j6e/iaN62F4ZUnru9nzL1VaIcxxUZjSPVtTVzI=
github.com/megaease/grace v1.0.0/go.mod h1:mOR6MVYQ6zGyuz9Y2or/VJ6QWueTL3erxWfIwyCmiIg=
github.com/megaease/jsonschema v0.5.1 h1:uTzdFo0YbRasSr/FW4pW4mjjzUkKuPHsj8Do4fGwycs=
Expand Down Expand Up @@ -1040,8 +1040,8 @@ golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d h1:3qF+Z8Hkrw9sOhrFHti9TlB1Hkac1x+DNRkv0XQiFjo=
golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20221012134737-56aed061732a h1:NmSIgad6KjE6VvHciPZuNRTKxGhlPfD6OA87W/PLkqg=
golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
Expand Down Expand Up @@ -1506,8 +1506,8 @@ google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX
google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc h1:Nf+EdcTLHR8qDNN/KfkQL0u0ssxt9OhbaWCl5C0ucEI=
google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=
google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a h1:GH6UPn3ixhWcKDhpnEC55S75cerLPdpp3hrhfKYjZgw=
google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
Expand Down Expand Up @@ -1539,8 +1539,8 @@ google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ5
google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w=
google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
google.golang.org/grpc v1.50.0 h1:fPVVDxY9w++VjTZsYvXWqEf9Rqar/e+9zYfxKK+W+YU=
google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
Expand Down
2 changes: 1 addition & 1 deletion pkg/object/meshcontroller/api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ func (a *API) registerAPIs() {

// TODO: API to get instances of one service.

{Path: MeshServiceDeploySpecPath, Method: "GET", Handler: a.getServiceDeploySpec},
{Path: MeshServiceDeploySpecPath, Method: "GET", Handler: a.getServiceDeployment},

{Path: MeshServiceInstancePrefix, Method: "GET", Handler: a.listServiceInstanceSpecs},
{Path: MeshServiceInstancePath, Method: "GET", Handler: a.getServiceInstanceSpec},
Expand Down
43 changes: 37 additions & 6 deletions pkg/object/meshcontroller/api/api_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,13 @@ import (
"net/http"
"path"
"sort"
"strings"

"github.com/go-chi/chi/v5"
v2alpha1 "github.com/megaease/easemesh-api/v2alpha1"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/megaease/easegress/pkg/api"
Expand All @@ -43,6 +45,18 @@ func (s servicesByOrder) Less(i, j int) bool { return s[i].Name < s[j].Name }
func (s servicesByOrder) Len() int { return len(s) }
func (s servicesByOrder) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

type configMapsByOrder []*v1.ConfigMap

func (s configMapsByOrder) Less(i, j int) bool { return s[i].Name < s[j].Name }
func (s configMapsByOrder) Len() int { return len(s) }
func (s configMapsByOrder) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

type secretsByOrder []*v1.Secret

func (s secretsByOrder) Less(i, j int) bool { return s[i].Name < s[j].Name }
func (s secretsByOrder) Len() int { return len(s) }
func (s secretsByOrder) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

func (a *API) readServiceName(r *http.Request) (string, error) {
serviceName := chi.URLParam(r, "serviceName")
if serviceName == "" {
Expand Down Expand Up @@ -208,7 +222,7 @@ func (a *API) deleteService(w http.ResponseWriter, r *http.Request) {
a.service.DeleteServiceSpec(serviceName)
}

func (a *API) getServiceDeploySpec(w http.ResponseWriter, r *http.Request) {
func (a *API) getServiceDeployment(w http.ResponseWriter, r *http.Request) {
const annotationServiceNameKey = "mesh.megaease.com/service-name"

serviceName, err := a.readServiceName(r)
Expand All @@ -232,6 +246,10 @@ func (a *API) getServiceDeploySpec(w http.ResponseWriter, r *http.Request) {
}

for _, deployment := range deployments.Items {
if strings.HasPrefix(deployment.Name, "canary-") {
continue
}

if deployment.Annotations[annotationServiceNameKey] == serviceName {
serviceDeployment.App = deployment
serviceDeployment.ConfigMaps, serviceDeployment.Secrets = a.getConfigMapsAndSecrets(&deployment)
Expand Down Expand Up @@ -267,26 +285,39 @@ func (a *API) getConfigMapsAndSecrets(spec interface{}) ([]*corev1.ConfigMap, []
panic(fmt.Errorf("unknown spec type %T", spec))
}

var configMaps []*corev1.ConfigMap
var secrets []*corev1.Secret
configMaps := map[string]*corev1.ConfigMap{}
secrets := map[string]*corev1.Secret{}
for _, volume := range volumes {
if volume.ConfigMap != nil {
configMap, err := a.k8sClient.CoreV1().ConfigMaps(namespace).Get(context.Background(),
volume.ConfigMap.Name, metav1.GetOptions{})
if err != nil {
api.ClusterPanic(fmt.Errorf("get configmap %s failed: %v", volume.ConfigMap.Name, err))
}
configMaps = append(configMaps, configMap)

configMaps[configMap.Name] = configMap
}
if volume.Secret != nil {
secret, err := a.k8sClient.CoreV1().Secrets(namespace).Get(context.Background(),
volume.Secret.SecretName, metav1.GetOptions{})
if err != nil {
api.ClusterPanic(fmt.Errorf("get secret %s failed: %v", volume.Secret.SecretName, err))
}
secrets = append(secrets, secret)
secrets[secret.Name] = secret
}
}

return configMaps, secrets
cms := []*corev1.ConfigMap{}
for _, cm := range configMaps {
cms = append(cms, cm)
}
sort.Sort(configMapsByOrder(cms))

ss := []*corev1.Secret{}
for _, s := range secrets {
ss = append(ss, s)
}
sort.Sort(secretsByOrder(ss))

return cms, ss
}
21 changes: 21 additions & 0 deletions pkg/object/meshcontroller/ingresscontroller/ingresscontroller.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,12 @@ func New(superSpec *supervisor.Spec) *IngressController {
logger.Errorf("watch ingress controller cert failed: %v", err)
}

if err := ic.informer.OnAllServiceCanaries(ic.handleServiceCanaries); err != nil {
if err != informer.ErrAlreadyWatched {
logger.Errorf("add service canary failed: %v", err)
}
}

return ic
}

Expand Down Expand Up @@ -191,6 +197,21 @@ func (ic *IngressController) handleServiceInstances(serviceInstances map[string]
return
}

func (ic *IngressController) handleServiceCanaries(serviceCanaries map[string]*spec.ServiceCanary) (continueWatch bool) {
continueWatch = true

defer func() {
if err := recover(); err != nil {
logger.Errorf("%s: handleServiceCanaries recover from: %v, stack trace:\n%s\n",
ic.superSpec.Name(), err, debug.Stack())
}
}()

ic.reloadTraffic()

return
}

func (ic *IngressController) reloadTraffic() {
ic.mutex.Lock()
defer ic.mutex.Unlock()
Expand Down
2 changes: 0 additions & 2 deletions pkg/object/meshcontroller/service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,6 @@ type (

// New creates a service with spec
func New(superSpec *supervisor.Spec) *Service {
superSpec.Super().Cluster().Layout().CustomDataKindPrefix()
superSpec.Super().Cluster().Layout().CustomDataPrefix()
kindPrefix := layout.CustomResourceKindPrefix()
dataPrefix := layout.AllCustomResourcePrefix()
s := &Service{
Expand Down

0 comments on commit 16469d4

Please sign in to comment.