Skip to content

Commit ef4b69e

Browse files
authored
Merge pull request #905 from SteveHNH/envoy_to_caddy
Switch out the envoy reverse proxy for caddy
2 parents 8a9c19c + 72ae92a commit ef4b69e

File tree

8 files changed

+159
-261
lines changed

8 files changed

+159
-261
lines changed

controllers/cloud.redhat.com/clowderconfig/config.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import (
88

99
type ClowderConfig struct {
1010
Images struct {
11-
MBOP string `json:"mbop"`
12-
Caddy string `json:"caddy"`
13-
CaddyGateway string `json:"caddyGateway"`
14-
Keycloak string `json:"Keycloak"`
15-
Mocktitlements string `json:"mocktitlements"`
16-
Envoy string `json:"envoy"`
11+
MBOP string `json:"mbop"`
12+
Caddy string `json:"caddy"`
13+
CaddyGateway string `json:"caddyGateway"`
14+
Keycloak string `json:"Keycloak"`
15+
Mocktitlements string `json:"mocktitlements"`
16+
CaddyReverseProxy string `json:"caddyReverseProxy"`
1717
} `json:"images"`
1818
DebugOptions struct {
1919
Logging struct {

controllers/cloud.redhat.com/providers/utils/utils.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ var DefaultImageCaddyGateway = DefaultImageCaddySideCar
2626
var DefaultImageMBOP = "quay.io/cloudservices/mbop:959d00d"
2727
var DefaultImageMocktitlements = "quay.io/cloudservices/mocktitlements:81fd80e"
2828
var DefaultKeyCloakVersion = "23.0.1"
29+
var DefaultImageCaddyProxy = "quay.io/cloudservices/caddy-ubi:latest"
2930
var DefaultImageKeyCloak = fmt.Sprintf("quay.io/keycloak/keycloak:%s", DefaultKeyCloakVersion)
3031

3132
// MakeLocalDB populates the given deployment object with the local DB struct.
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package web
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
7+
crd "github.com/RedHatInsights/clowder/apis/cloud.redhat.com/v1alpha1"
8+
9+
caddy "github.com/caddyserver/caddy/v2"
10+
caddyconfig "github.com/caddyserver/caddy/v2/caddyconfig"
11+
caddyhttp "github.com/caddyserver/caddy/v2/modules/caddyhttp"
12+
"github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy"
13+
caddytls "github.com/caddyserver/caddy/v2/modules/caddytls"
14+
)
15+
16+
func generateServers(pub bool, priv bool, pubPort uint32, privPort uint32, appPubPort int32, appPrivPort int32) (map[string]*caddyhttp.Server, error) {
17+
servers := make(map[string]*caddyhttp.Server)
18+
19+
tlsConnPolicy := []*caddytls.ConnectionPolicy{{
20+
CertSelection: &caddytls.CustomCertSelectionPolicy{
21+
AnyTag: []string{"cert0"},
22+
},
23+
}}
24+
25+
if pub {
26+
pubServer := generateServer(pubPort, appPubPort, tlsConnPolicy)
27+
servers["pubServer"] = pubServer
28+
}
29+
30+
if priv {
31+
privServer := generateServer(privPort, appPrivPort, tlsConnPolicy)
32+
servers["privServer"] = privServer
33+
}
34+
35+
return servers, nil
36+
}
37+
38+
func generateServer(port uint32, appPort int32, tlsConnPolicy []*caddytls.ConnectionPolicy) *caddyhttp.Server {
39+
40+
var warnings []caddyconfig.Warning
41+
42+
reverseProxy := reverseproxy.Handler{
43+
Upstreams: []*reverseproxy.Upstream{{
44+
Dial: fmt.Sprintf("localhost:%d", appPort),
45+
}},
46+
}
47+
48+
server := &caddyhttp.Server{
49+
Listen: []string{fmt.Sprintf(":%d", port)},
50+
Routes: caddyhttp.RouteList{{
51+
HandlersRaw: []json.RawMessage{
52+
caddyconfig.JSONModuleObject(reverseProxy, "handler", "reverse_proxy", &warnings),
53+
},
54+
}},
55+
TLSConnPolicies: tlsConnPolicy,
56+
}
57+
58+
return server
59+
}
60+
61+
func generateCaddyConfig(pub bool, priv bool, pubPort uint32, privPort uint32, env *crd.ClowdEnvironment) (string, error) {
62+
var warnings []caddyconfig.Warning
63+
64+
var servers map[string]*caddyhttp.Server
65+
var err error
66+
67+
appPubPort := env.Spec.Providers.Web.Port
68+
appPrivPort := env.Spec.Providers.Web.PrivatePort
69+
70+
servers, err = generateServers(pub, priv, pubPort, privPort, appPubPort, appPrivPort)
71+
if err != nil {
72+
fmt.Print("error generating caddy server config. Server generation failed")
73+
}
74+
75+
appConfig := caddyhttp.App{
76+
Servers: servers,
77+
}
78+
79+
fl := caddytls.FileLoader{{
80+
Certificate: "/certs/tls.crt",
81+
Key: "/certs/tls.key",
82+
Tags: []string{"cert0"},
83+
}}
84+
85+
tlsConfig := caddytls.TLS{
86+
CertificatesRaw: caddy.ModuleMap{"load_files": caddyconfig.JSON(fl, &warnings)},
87+
}
88+
89+
v := caddy.Config{
90+
StorageRaw: []byte{},
91+
AppsRaw: map[string]json.RawMessage{
92+
"http": caddyconfig.JSON(appConfig, &warnings),
93+
"tls": caddyconfig.JSON(tlsConfig, &warnings),
94+
},
95+
}
96+
97+
pretty, _ := json.MarshalIndent(v, "", " ")
98+
return string(pretty), nil
99+
}

controllers/cloud.redhat.com/providers/web/default.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ type webProvider struct {
2020
func NewWebProvider(p *providers.Provider) (providers.ClowderProvider, error) {
2121
p.Cache.AddPossibleGVKFromIdent(
2222
CoreService,
23-
CoreEnvoyConfigMap,
23+
CoreCaddyConfigMap,
2424
)
2525
return &webProvider{Provider: *p}, nil
2626
}

controllers/cloud.redhat.com/providers/web/envoy.go

Lines changed: 0 additions & 203 deletions
This file was deleted.

0 commit comments

Comments
 (0)