Skip to content

Commit e52c295

Browse files
install app-proxy ingress (#190)
* install app-proxy ingress
1 parent 763b9b8 commit e52c295

File tree

12 files changed

+136
-49
lines changed

12 files changed

+136
-49
lines changed

venona/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.4.28
1+
1.4.29

venonactl/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.4.28
1+
1.4.29

venonactl/cmd/install-app-proxy.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
*/
1818

1919
import (
20+
"fmt"
21+
2022
"github.com/codefresh-io/venona/venonactl/pkg/plugins"
2123
"github.com/codefresh-io/venona/venonactl/pkg/store"
2224
"github.com/spf13/cobra"
@@ -32,6 +34,8 @@ var installAppProxyCmdOptions struct {
3234
templateFileValues []string
3335
templateValueFiles []string
3436
resources map[string]interface{}
37+
host string
38+
ingressClass string
3539
}
3640

3741
var installAppProxyCmd = &cobra.Command{
@@ -47,15 +51,21 @@ var installAppProxyCmd = &cobra.Command{
4751
dieOnError(err)
4852
}
4953

54+
mergeValueStr(templateValuesMap, "CodefreshHost", &cfAPIHost)
5055
mergeValueStr(templateValuesMap, "Namespace", &installAppProxyCmdOptions.kube.namespace)
5156
mergeValueStr(templateValuesMap, "Context", &installAppProxyCmdOptions.kube.context)
57+
mergeValueStr(templateValuesMap, "AppProxy.Host", &installAppProxyCmdOptions.host)
58+
mergeValueStr(templateValuesMap, "AppProxy.IngressClass", &installAppProxyCmdOptions.ingressClass)
5259

5360
mergeValueMSI(templateValuesMap, "AppProxy.resources", &installAppProxyCmdOptions.resources)
5461

5562
s := store.GetStore()
5663
lgr := createLogger("Install-agent", verbose, logFormatter)
5764
buildBasicStore(lgr)
5865
builder := plugins.NewBuilder(lgr)
66+
if installAppProxyCmdOptions.host == "" {
67+
dieOnError(fmt.Errorf("host options is required in order to install app-proxy"))
68+
}
5969
if cfAPIHost == "" {
6070
cfAPIHost = "https://g.codefresh.io"
6171
}
@@ -78,24 +88,23 @@ var installAppProxyCmd = &cobra.Command{
7888

7989
values := s.BuildValues()
8090
values = mergeMaps(values, templateValuesMap)
81-
spn := createSpinner("Installing app proxy (might take a few minutes)", "")
82-
spn.Start()
83-
defer spn.Stop()
8491
for _, p := range builder.Get() {
8592
values, err = p.Install(builderInstallOpt, values)
8693
if err != nil {
8794
dieOnError(err)
8895
}
8996
}
90-
lgr.Info("App proxy installation completed Successfully")
9197

98+
lgr.Info("App proxy installation completed Successfully")
9299
},
93100
}
94101

95102
func init() {
96103
viper.BindEnv("kube-namespace", "KUBE_NAMESPACE")
97104
viper.BindEnv("kube-context", "KUBE_CONTEXT")
98105
installCommand.AddCommand(installAppProxyCmd)
106+
installAppProxyCmd.Flags().StringVar(&installAppProxyCmdOptions.host, "host", "", "Host name that will be used by the ingress to route traffic to the App-Proxy service")
107+
installAppProxyCmd.Flags().StringVar(&installAppProxyCmdOptions.ingressClass, "ingress-class", "", "The ingress class name that will be used by the App-Proxy ingress. If left empty, the default one will be used")
99108
installAppProxyCmd.Flags().StringVar(&installAppProxyCmdOptions.kube.namespace, "kube-namespace", viper.GetString("kube-namespace"), "Name of the namespace on which venona should be installed [$KUBE_NAMESPACE]")
100109
installAppProxyCmd.Flags().StringVar(&installAppProxyCmdOptions.kube.context, "kube-context-name", viper.GetString("kube-context"), "Name of the kubernetes context on which venona should be installed (default is current-context) [$KUBE_CONTEXT]")
101110
installAppProxyCmd.Flags().StringArrayVarP(&installAppProxyCmdOptions.templateValueFiles, "values", "f", []string{}, "specify values in a YAML file")

venonactl/example/values-example.yaml

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,21 @@ Namespace: r1
137137
# memory: 500Mi
138138

139139
# AppProxy:
140-
# resources:
141-
# limits:
142-
# cpu: 500m
143-
# memory: 1200Mi
144-
# requests:
145-
# cpu: 200m
146-
# memory: 500Mi
140+
# resources:
141+
# limits:
142+
# cpu: 500m
143+
# memory: 1200Mi
144+
# requests:
145+
# cpu: 200m
146+
# memory: 500Mi
147+
148+
149+
# Host: example.com
150+
# IngressClass: nginx
151+
# TLSSecret: cert-secret-name
152+
# PathPrefix: /app-proxy/?(.*) # default is '/'
153+
154+
### Additional annotations that will be set on the ingress definition
155+
# Annotations:
156+
# nginx.ingress.kubernetes.io/rewrite-target: /$1
157+
# nginx.ingress.kubernetes.io/whitelist-source-range: 123.123.123.123/130

venonactl/go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
44
cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo=
55
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
66
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
7+
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
78
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
89
github.com/Azure/go-autorest v13.3.2+incompatible h1:VxzPyuhtnlBOzc4IWCZHqpyH2d+QMLQEuy3wREyY4oc=
910
github.com/Azure/go-autorest v13.3.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
@@ -300,6 +301,7 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
300301
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
301302
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
302303
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
304+
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
303305
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
304306
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
305307
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@@ -424,6 +426,7 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV
424426
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
425427
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
426428
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
429+
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
427430
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
428431
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
429432
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=

venonactl/pkg/obj/kubeobj/kubeobj.go

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

venonactl/pkg/obj/kubeobj_generator.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ var functionsMap map[string]string = map[string]string{
4545
"v1beta1.Deployment": "ExtensionsV1beta1().Deployments(namespace)",
4646
"v1beta1.DaemonSet": "ExtensionsV1beta1().DaemonSets(namespace)",
4747

48+
"netV1beta1.Ingress": "NetworkingV1beta1().Ingresses(namespace)",
49+
4850
"appsv1.Deployment": "AppsV1().Deployments(namespace)",
4951
"appsv1.DaemonSet": "AppsV1().DaemonSets(namespace)",
5052

@@ -77,7 +79,8 @@ import (
7779
7880
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7981
"k8s.io/api/core/v1"
80-
v1beta1 "k8s.io/api/extensions/v1beta1"
82+
v1beta1 "k8s.io/api/extensions/v1beta1"
83+
netV1beta1 "k8s.io/api/networking/v1beta1"
8184
appsv1 "k8s.io/api/apps/v1"
8285
8386
rbacv1beta1 "k8s.io/api/rbac/v1beta1"

venonactl/pkg/plugins/app-proxy.go

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import (
44
"encoding/json"
55
"fmt"
66
"os"
7-
"time"
87

98
"github.com/codefresh-io/venona/venonactl/pkg/logger"
109
templates "github.com/codefresh-io/venona/venonactl/pkg/templates/kubernetes"
11-
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"github.com/stretchr/objx"
1211
)
1312

1413
type appProxyPlugin struct {
@@ -45,40 +44,19 @@ func (u *appProxyPlugin) Install(opt *InstallOptions, v Values) (Values, error)
4544
u.logger.Error(fmt.Sprintf("AppProxy installation failed: %v", err))
4645
return nil, err
4746
}
48-
// locating the serivce and get it's internal api
4947

50-
var ingressIP string
51-
ticker := time.NewTicker(5 * time.Second)
52-
Loop:
53-
for {
54-
select {
55-
case <-ticker.C:
56-
u.logger.Debug("Checking for app-proxy-service")
57-
service, err := cs.CoreV1().Services(opt.ClusterNamespace).Get("app-proxy-service", v1.GetOptions{})
58-
if err == nil {
59-
ips := service.Status.LoadBalancer.Ingress
60-
if len(ips) > 0 {
61-
if ips[0].IP != "" {
62-
ingressIP = ips[0].IP
63-
} else {
64-
ingressIP = ips[0].Hostname
65-
}
66-
break Loop
67-
}
68-
}
69-
case <-time.After(600 * time.Second):
70-
u.logger.Error("Failed to get app-proxy-service internal ip")
71-
return v, fmt.Errorf("Failed to get app-proxy-service internal ip")
72-
}
73-
}
74-
u.logger.Info(fmt.Sprintf("app proxy has ingress ip: %v\n", ingressIP))
48+
host := objx.New(v["AppProxy"]).Get("Host").Str()
49+
pathPrefix := objx.New(v["AppProxy"]).Get("PathPrefix").Str()
50+
appProxyURL := fmt.Sprintf("https://%v%v", host, pathPrefix)
51+
u.logger.Info(fmt.Sprintf("\napp proxy is running at: %v", appProxyURL))
52+
7553
// update IPC
7654
file := os.NewFile(3, "pipe")
7755
if file == nil {
7856
return v, nil
7957
}
8058
data := map[string]interface{}{
81-
"ingressIP": ingressIP,
59+
"ingressIP": appProxyURL,
8260
}
8361
var jsonData []byte
8462
jsonData, err = json.Marshal(data)

venonactl/pkg/store/store.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,12 @@ type (
113113
Resources map[string]interface{}
114114
}
115115
AppProxy struct {
116-
Resources map[string]interface{}
116+
Resources map[string]interface{}
117+
Host string
118+
Annotations map[string]string
119+
IngressClass string
120+
TLSSecret string
121+
PathPrefix string
117122
}
118123
)
119124

@@ -192,7 +197,12 @@ func (s *Values) BuildValues() map[string]interface{} {
192197
"Name": "codefresh/cf-app-proxy",
193198
"Tag": "latest",
194199
},
195-
"Resources": s.AppProxy.Resources,
200+
"Host": s.AppProxy.Host,
201+
"IngressClass": s.AppProxy.IngressClass,
202+
"Annotations": s.AppProxy.Annotations,
203+
"Resources": s.AppProxy.Resources,
204+
"TLSSecret": s.AppProxy.TLSSecret,
205+
"PathPrefix": s.AppProxy.PathPrefix,
196206
},
197207
}
198208
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
apiVersion: networking.k8s.io/v1beta1
2+
kind: Ingress
3+
metadata:
4+
annotations:
5+
{{ if ne .AppProxy.IngressClass "" }}kubernetes.io/ingress.class: {{ .AppProxy.IngressClass }}{{ end }}
6+
{{ range $key, $value := .AppProxy.Annotations }}
7+
{{ $key }}: {{ $value }}
8+
{{ end }}
9+
name: app-proxy
10+
namespace: {{ .Namespace }}
11+
spec:
12+
rules:
13+
- host: {{ .AppProxy.Host }}
14+
http:
15+
paths:
16+
- path: {{ if ne .AppProxy.PathPrefix "" }}{{ .AppProxy.PathPrefix }}{{ else }}'/'{{end}}
17+
backend:
18+
serviceName: app-proxy
19+
servicePort: 80
20+
{{ if ne .AppProxy.TLSSecret "" }}
21+
tls:
22+
- hosts:
23+
- {{ .AppProxy.Host }}
24+
secretName: {{ .AppProxy.TLSSecret }}
25+
{{ end }}

0 commit comments

Comments
 (0)