Skip to content

Commit

Permalink
Add EnvoyProxy resource validation to egctl translate
Browse files Browse the repository at this point in the history
Relates to envoyproxy#31

Signed-off-by: Arko Dasgupta <arko@tetrate.io>
  • Loading branch information
arkodg committed Apr 13, 2023
1 parent 6589ebd commit 4ec244a
Show file tree
Hide file tree
Showing 10 changed files with 1,087 additions and 19 deletions.
7 changes: 4 additions & 3 deletions api/config/v1alpha1/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,10 @@ func validateProvider(spec *EnvoyProxySpec) []error {
func validateServiceType(spec *EnvoyProxySpec) []error {
var errs []error
if spec.Provider.Kubernetes != nil && spec.Provider.Kubernetes.EnvoyService != nil {
serviceType := spec.Provider.Kubernetes.EnvoyService.Type
if *serviceType != ServiceTypeLoadBalancer && *serviceType != ServiceTypeClusterIP {
errs = append(errs, fmt.Errorf("unsupported envoy service type %v", serviceType))
if serviceType := spec.Provider.Kubernetes.EnvoyService.Type; serviceType != nil {
if *serviceType != ServiceTypeLoadBalancer && *serviceType != ServiceTypeClusterIP {
errs = append(errs, fmt.Errorf("unsupported envoy service type %v", serviceType))
}
}
}
return errs
Expand Down
182 changes: 182 additions & 0 deletions internal/cmd/egctl/testdata/translate/in/invalid-envoyproxy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
apiVersion: config.gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: example
namespace: default
spec:
bootstrap: blah
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: GatewayClass
metadata:
name: eg
spec:
controllerName: gateway.envoyproxy.io/gatewayclass-controller
parametersRef:
group: config.gateway.envoyproxy.io
kind: EnvoyProxy
name: example
namespace: default
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
name: eg
namespace: default
spec:
gatewayClassName: eg
listeners:
- name: tcp
protocol: TCP
port: 1234
- name: udp
protocol: UDP
port: 1234
- name: tls-passthrough
protocol: TLS
port: 8443
hostname: foo.com
tls:
mode: Passthrough
- name: http
protocol: HTTP
port: 80
allowedRoutes:
kinds:
- kind: HTTPRoute
group: gateway.networking.k8s.io
- name: grpc
protocol: HTTP
port: 8080
allowedRoutes:
kinds:
- kind: GRPCRoute
group: gateway.networking.k8s.io
---
apiVersion: v1
kind: Namespace
metadata:
name: default
---
apiVersion: v1
kind: Service
metadata:
name: backend
namespace: default
labels:
app: backend
service: backend
spec:
clusterIP: "1.1.1.1"
type: ClusterIP
ports:
- name: http
port: 3000
targetPort: 3000
protocol: TCP
- name: http
port: 9000
protocol: TCP
targetPort: 9000
- name: udp
port: 3000
targetPort: 3000
protocol: UDP
selector:
app: backend
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
name: backend
namespace: default
spec:
parentRefs:
- name: eg
sectionName: tcp
rules:
- backendRefs:
- group: ""
kind: Service
name: backend
port: 3000
weight: 1
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: UDPRoute
metadata:
name: backend
namespace: default
spec:
parentRefs:
- name: eg
sectionName: udp
rules:
- backendRefs:
- group: ""
kind: Service
name: backend
port: 3000
weight: 1
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TLSRoute
metadata:
name: backend
namespace: default
spec:
parentRefs:
- name: eg
sectionName: tls-passthrough
rules:
- backendRefs:
- group: ""
kind: Service
name: backend
port: 3000
weight: 1
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: backend
namespace: default
spec:
parentRefs:
- name: eg
hostnames:
- "www.example.com"
rules:
- backendRefs:
- group: ""
kind: Service
name: backend
port: 3000
weight: 1
matches:
- path:
type: PathPrefix
value: /
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: GRPCRoute
metadata:
name: backend
namespace: default
spec:
parentRefs:
- name: eg
sectionName: grpc
hostnames:
- "www.grpc-example.com"
rules:
- matches:
- method:
service: com.example.Things
method: DoThing
backendRefs:
- group: ""
kind: Service
name: backend
port: 9000
weight: 1
187 changes: 187 additions & 0 deletions internal/cmd/egctl/testdata/translate/in/valid-envoyproxy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
apiVersion: config.gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: example
namespace: default
spec:
provider:
type: Kubernetes
kubernetes:
envoyService:
annotations:
custom1: svc-annotation1
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: GatewayClass
metadata:
name: eg
spec:
controllerName: gateway.envoyproxy.io/gatewayclass-controller
parametersRef:
group: config.gateway.envoyproxy.io
kind: EnvoyProxy
name: example
namespace: default
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
name: eg
namespace: default
spec:
gatewayClassName: eg
listeners:
- name: tcp
protocol: TCP
port: 1234
- name: udp
protocol: UDP
port: 1234
- name: tls-passthrough
protocol: TLS
port: 8443
hostname: foo.com
tls:
mode: Passthrough
- name: http
protocol: HTTP
port: 80
allowedRoutes:
kinds:
- kind: HTTPRoute
group: gateway.networking.k8s.io
- name: grpc
protocol: HTTP
port: 8080
allowedRoutes:
kinds:
- kind: GRPCRoute
group: gateway.networking.k8s.io
---
apiVersion: v1
kind: Namespace
metadata:
name: default
---
apiVersion: v1
kind: Service
metadata:
name: backend
namespace: default
labels:
app: backend
service: backend
spec:
clusterIP: "1.1.1.1"
type: ClusterIP
ports:
- name: http
port: 3000
targetPort: 3000
protocol: TCP
- name: http
port: 9000
protocol: TCP
targetPort: 9000
- name: udp
port: 3000
targetPort: 3000
protocol: UDP
selector:
app: backend
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
name: backend
namespace: default
spec:
parentRefs:
- name: eg
sectionName: tcp
rules:
- backendRefs:
- group: ""
kind: Service
name: backend
port: 3000
weight: 1
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: UDPRoute
metadata:
name: backend
namespace: default
spec:
parentRefs:
- name: eg
sectionName: udp
rules:
- backendRefs:
- group: ""
kind: Service
name: backend
port: 3000
weight: 1
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TLSRoute
metadata:
name: backend
namespace: default
spec:
parentRefs:
- name: eg
sectionName: tls-passthrough
rules:
- backendRefs:
- group: ""
kind: Service
name: backend
port: 3000
weight: 1
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: backend
namespace: default
spec:
parentRefs:
- name: eg
hostnames:
- "www.example.com"
rules:
- backendRefs:
- group: ""
kind: Service
name: backend
port: 3000
weight: 1
matches:
- path:
type: PathPrefix
value: /
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: GRPCRoute
metadata:
name: backend
namespace: default
spec:
parentRefs:
- name: eg
sectionName: grpc
hostnames:
- "www.grpc-example.com"
rules:
- matches:
- method:
service: com.example.Things
method: DoThing
backendRefs:
- group: ""
kind: Service
name: backend
port: 9000
weight: 1
Loading

0 comments on commit 4ec244a

Please sign in to comment.