2016-09-22 18:00:09 +00:00
/ *
Copyright 2016 The Kubernetes Authors .
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
2016-11-10 22:56:29 +00:00
package sslpassthrough
2016-09-22 18:00:09 +00:00
import (
2021-08-21 20:42:00 +00:00
networking "k8s.io/api/networking/v1"
2016-11-16 18:24:26 +00:00
2017-11-07 22:02:12 +00:00
"k8s.io/ingress-nginx/internal/ingress/annotations/parser"
ing_errors "k8s.io/ingress-nginx/internal/ingress/errors"
2017-11-08 20:58:57 +00:00
"k8s.io/ingress-nginx/internal/ingress/resolver"
2016-09-22 18:00:09 +00:00
)
2023-07-22 03:32:07 +00:00
const (
sslPassthroughAnnotation = "ssl-passthrough"
)
var sslPassthroughAnnotations = parser . Annotation {
Group : "" , // TBD
Annotations : parser . AnnotationFields {
sslPassthroughAnnotation : {
Validator : parser . ValidateBool ,
Scope : parser . AnnotationScopeIngress ,
Risk : parser . AnnotationRiskLow , // Low, as it allows regexes but on a very limited set
Documentation : ` This annotation instructs the controller to send TLS connections directly to the backend instead of letting NGINX decrypt the communication. ` ,
} ,
} ,
}
2016-12-29 20:02:06 +00:00
type sslpt struct {
2023-07-22 03:32:07 +00:00
r resolver . Resolver
annotationConfig parser . Annotation
2016-12-29 20:02:06 +00:00
}
// NewParser creates a new SSL passthrough annotation parser
2017-11-08 20:58:57 +00:00
func NewParser ( r resolver . Resolver ) parser . IngressAnnotation {
2023-07-22 03:32:07 +00:00
return sslpt { r : r ,
annotationConfig : sslPassthroughAnnotations ,
}
2016-12-29 20:02:06 +00:00
}
2016-11-10 22:56:29 +00:00
// ParseAnnotations parses the annotations contained in the ingress
// rule used to indicate if is required to configure
2019-06-09 22:49:59 +00:00
func ( a sslpt ) Parse ( ing * networking . Ingress ) ( interface { } , error ) {
2016-11-10 22:56:29 +00:00
if ing . GetAnnotations ( ) == nil {
2016-12-29 20:02:06 +00:00
return false , ing_errors . ErrMissingAnnotations
2016-09-22 18:00:09 +00:00
}
2023-07-22 03:32:07 +00:00
return parser . GetBoolAnnotation ( sslPassthroughAnnotation , ing , a . annotationConfig . Annotations )
}
func ( a sslpt ) GetDocumentation ( ) parser . AnnotationFields {
return a . annotationConfig . Annotations
}
func ( a sslpt ) Validate ( anns map [ string ] string ) error {
maxrisk := parser . StringRiskToRisk ( a . r . GetSecurityConfiguration ( ) . AnnotationsRiskLevel )
return parser . CheckAnnotationRisk ( anns , maxrisk , sslPassthroughAnnotations . Annotations )
2016-09-22 18:00:09 +00:00
}