Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
72b6c40
Adding logger to controller main.go
rewagner87 Jun 24, 2019
44d63dd
Adding some test statements
rewagner87 Jun 24, 2019
2f29299
Check for config
rewagner87 Jun 24, 2019
541a364
Check for config
rewagner87 Jun 24, 2019
301837a
Check for config
rewagner87 Jun 24, 2019
4b20ed9
Check for config
rewagner87 Jun 24, 2019
22ebe45
Check for config
rewagner87 Jun 24, 2019
face3d3
Check for config
rewagner87 Jun 26, 2019
e303df8
Check for config
rewagner87 Jun 26, 2019
78b75d4
Check for config
rewagner87 Jun 26, 2019
eefe9f7
Check for config
rewagner87 Jun 26, 2019
bcfd16b
Check for config
rewagner87 Jun 26, 2019
cd46ffa
Check for config
rewagner87 Jun 26, 2019
5eaa41b
Check for config
rewagner87 Jun 26, 2019
fe26fdc
Check for config
rewagner87 Jun 26, 2019
c4e563c
Check for config
rewagner87 Jun 26, 2019
66e6871
Check for config
rewagner87 Jun 26, 2019
d6a825e
Check for config
rewagner87 Jun 26, 2019
907e17a
Check for config
rewagner87 Jun 26, 2019
acd12da
Check for config
rewagner87 Jun 26, 2019
b20a5e7
Check for config
rewagner87 Jun 26, 2019
873476b
Check for config
rewagner87 Jun 26, 2019
a3b92c3
Check for config
rewagner87 Jun 26, 2019
9387efc
Check for config
rewagner87 Jun 26, 2019
d965efc
Check for config
rewagner87 Jun 26, 2019
4175093
Check for config
rewagner87 Jun 26, 2019
17f4c58
Check for config
rewagner87 Jun 26, 2019
5676760
Check for config
rewagner87 Jun 26, 2019
86ca01b
Check for config
rewagner87 Jun 26, 2019
feac179
Check for config
rewagner87 Jun 26, 2019
e666f37
Check for config
rewagner87 Jun 26, 2019
57ec497
Check for config
rewagner87 Jun 26, 2019
e2cb3ed
Check for config
rewagner87 Jun 26, 2019
cffee9c
Check for config
rewagner87 Jun 26, 2019
c29b07d
Check for config
rewagner87 Jun 26, 2019
26e9a7b
Check for config
rewagner87 Jun 26, 2019
e7fe461
Check for config
rewagner87 Jun 26, 2019
9b22971
Check for config
rewagner87 Jun 26, 2019
3cc4aa0
Check for config
rewagner87 Jun 26, 2019
5c123f3
Check for config
rewagner87 Jun 26, 2019
a668f4f
Check for config
rewagner87 Jun 26, 2019
9bd4c0d
Check for config
rewagner87 Jun 26, 2019
6912218
Check for config
rewagner87 Jun 26, 2019
a651af8
Check for config
rewagner87 Jun 26, 2019
7edf561
Check for config
rewagner87 Jun 26, 2019
ee25fcb
Check for config
rewagner87 Jun 26, 2019
28ac63a
Check for config
rewagner87 Jun 26, 2019
8438973
Check for config
rewagner87 Jun 26, 2019
65e95ee
Check for config
rewagner87 Jun 26, 2019
8996069
Check for config
rewagner87 Jun 26, 2019
90630ad
Check for config
rewagner87 Jun 26, 2019
6dedab9
Check for config
rewagner87 Jun 26, 2019
7416c90
Check for config
rewagner87 Jun 26, 2019
059f014
Check for config
rewagner87 Jun 26, 2019
dafc23f
Check for config
rewagner87 Jun 26, 2019
3c151c8
Check for config
rewagner87 Jun 26, 2019
23dc422
Check for config
rewagner87 Jun 26, 2019
67c715d
Check for config
rewagner87 Jun 26, 2019
49e3909
Check for config
rewagner87 Jun 26, 2019
f340275
Check for config
rewagner87 Jun 26, 2019
dcf5698
Check for config
rewagner87 Jun 26, 2019
7ff2299
Check for config
rewagner87 Jun 26, 2019
3cde19b
Check for config
rewagner87 Jun 26, 2019
d34e1b7
Check for config
rewagner87 Jun 26, 2019
eadf7c0
Getting rid of test log statements and fixing up formatting for some …
rewagner87 Jun 27, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions pkg/network/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ var (
// that specifies enabling auto-TLS or not.
AutoTLSKey = "autoTLS"

// CheckExistingCertsKey is the name of the configuration entry
// that specifies creation of TLS entries in gateway with existing secrets.
CheckExistingCertsKey = "checkExistingCerts"

// HTTPProtocolKey is the name of the configuration entry that
// specifies the HTTP endpoint behavior of Knative ingress.
HTTPProtocolKey = "httpProtocol"
Expand Down Expand Up @@ -153,6 +157,8 @@ type Config struct {
// AutoTLS specifies if auto-TLS is enabled or not.
AutoTLS bool

CheckExistingCerts bool

// HTTPProtocol specifics the behavior of HTTP endpoint of Knative
// ingress.
HTTPProtocol HTTPProtocol
Expand Down Expand Up @@ -248,6 +254,8 @@ func NewConfigFromConfigMap(configMap *corev1.ConfigMap) (*Config, error) {

nc.AutoTLS = strings.ToLower(configMap.Data[AutoTLSKey]) == "enabled"

nc.CheckExistingCerts = strings.ToLower(configMap.Data[CheckExistingCertsKey]) == "enabled"

switch strings.ToLower(configMap.Data[HTTPProtocolKey]) {
case string(HTTPEnabled):
nc.HTTPProtocol = HTTPEnabled
Expand Down
34 changes: 34 additions & 0 deletions pkg/reconciler/clusteringress/clusteringress.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,36 @@ func (c *Reconciler) reconcile(ctx context.Context, ci *v1alpha1.ClusterIngress)
ci.Status.MarkLoadBalancerReady(getLBStatus(gatewayServiceURLFromContext(ctx, ci)))
ci.Status.ObservedGeneration = ci.Generation

if checkExistingCerts(ctx) {

// Add the finalizer before adding `Servers` into Gateway so that we can be sure
// the `Servers` get cleaned up from Gateway.
if err := c.ensureFinalizer(ci); err != nil {
return err
}

// This works under the assumption the secrets/certs exist under istio-system namespace
secrets, err := resources.GetClusterIngressHostSecrets(ci, c.secretLister, "istio-system")
if err != nil {
return err
}

for _, gatewayName := range gatewayNames {
ns, err := resources.GatewayServiceNamespace(config.FromContext(ctx).Istio.IngressGateways, gatewayName)
if err != nil {
return err
}
desired, err := resources.MakeServersFromExistingCerts(ci, ns, secrets)
if err != nil {
return err
}
if err := c.reconcileGateway(ctx, ci, gatewayName, desired); err != nil {
return err
}
}

}

if enablesAutoTLS(ctx) {
if !ci.IsPublic() {
logger.Infof("ClusterIngress %s is not public. So no need to configure TLS.", ci.Name)
Expand Down Expand Up @@ -222,6 +252,10 @@ func enablesAutoTLS(ctx context.Context) bool {
return config.FromContext(ctx).Network.AutoTLS
}

func checkExistingCerts(ctx context.Context) bool {
return config.FromContext(ctx).Network.CheckExistingCerts
}

func getLBStatus(gatewayServiceURL string) []v1alpha1.LoadBalancerIngressStatus {
// The ClusterIngress isn't load-balanced by any particular
// Service, but through a Service mesh.
Expand Down
24 changes: 24 additions & 0 deletions pkg/reconciler/clusteringress/resources/gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,30 @@ func MakeServers(ci *v1alpha1.ClusterIngress, gatewayServiceNamespace string, or
return SortServers(servers), nil
}

// MakeServersFromExistingCerts creates the expected Gateway Servers that are referenced by the ClusterIngree.
// This method builds these Servers with manually added secrets instead of AutoTLS created ones.
func MakeServersFromExistingCerts(ci *v1alpha1.ClusterIngress, gatewayServiceNamespace string, originSecrets map[string]*corev1.Secret) ([]v1alpha3.Server, error) {
servers := []v1alpha3.Server{}
for i, rules := range ci.Spec.Rules {
// Replace first part of fqdn with wildcard to be used as the Hosts field.
credName = rules.Hosts[0]
hostname := []string{"*" + credName[strings.Index(credName, "."):len(credName)]}
servers = append(servers, v1alpha3.Server{
Hosts: hostname,
Port: v1alpha3.Port{
Name: fmt.Sprintf("%s:%d", ci.Name, i),
Number: 443,
Protocol: v1alpha3.ProtocolHTTPS,
},
TLS: &v1alpha3.TLSOptions{
Mode: v1alpha3.TLSModeMutual,
CredentialName: credName,
},
})
}
return SortServers(servers), nil
}

// MakeHTTPServer creates a HTTP Gateway `Server` based on the HTTPProtocol
// configureation.
func MakeHTTPServer(httpProtocol network.HTTPProtocol) *v1alpha3.Server {
Expand Down
16 changes: 16 additions & 0 deletions pkg/reconciler/clusteringress/resources/secret.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,22 @@ func GetSecrets(ci *v1alpha1.ClusterIngress, secretLister corev1listers.SecretLi
return secrets, nil
}

// GetClusterIngressHostSecrets gets the secrets whose name matches the host listed in the given ClusterIngress.
func GetClusterIngressHostSecrets(ci *v1alpha1.ClusterIngress, secretLister corev1listers.SecretLister, ns string) (map[string]*corev1.Secret, error) {

secrets := map[string]*corev1.Secret{}
var host = ci.Spec.Rules[0].Hosts[0]
secret, err := secretLister.Secrets(ns).Get(host)
if err != nil {
return nil, err
}

ref := fmt.Sprintf("%s/%s", ns, host)
secrets[ref] = secret

return secrets, nil
}

// MakeSecrets makes copies of the origin Secrets under the namespace of Istio gateway service.
func MakeSecrets(ctx context.Context, originSecrets map[string]*corev1.Secret, ci *v1alpha1.ClusterIngress) []*corev1.Secret {
gatewaySvcNamespaces := getAllGatewaySvcNamespaces(ctx)
Expand Down