You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by kv...@apache.org on 2021/09/01 06:23:06 UTC
[apisix-ingress-controller] branch master updated: feat: route crd
add timeout fields (#609)
This is an automated email from the ASF dual-hosted git repository.
kvn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git
The following commit(s) were added to refs/heads/master by this push:
new d4a832c feat: route crd add timeout fields (#609)
d4a832c is described below
commit d4a832cf57eb633e8bc1a3bb1a71ba0ae2360337
Author: oliver <do...@gmail.com>
AuthorDate: Wed Sep 1 14:23:02 2021 +0800
feat: route crd add timeout fields (#609)
---
pkg/kube/apisix/apis/config/v1/types.go | 7 ++++---
.../apisix/apis/config/v1/zz_generated.deepcopy.go | 5 +++++
pkg/kube/apisix/apis/config/v2alpha1/types.go | 8 ++++++++
.../apis/config/v2alpha1/zz_generated.deepcopy.go | 24 ++++++++++++++++++++++
pkg/kube/apisix/apis/config/v2beta1/types.go | 8 ++++++++
.../apis/config/v2beta1/zz_generated.deepcopy.go | 24 ++++++++++++++++++++++
pkg/kube/translation/apisix_route.go | 17 +++++++++++++++
pkg/types/apisix/v1/types.go | 23 +++++++++++----------
pkg/types/apisix/v1/zz_generated.deepcopy.go | 5 +++++
samples/deploy/crd/v1beta1/ApisixRoute.yaml | 9 ++++++++
10 files changed, 116 insertions(+), 14 deletions(-)
diff --git a/pkg/kube/apisix/apis/config/v1/types.go b/pkg/kube/apisix/apis/config/v1/types.go
index a8b9181..3eea11a 100644
--- a/pkg/kube/apisix/apis/config/v1/types.go
+++ b/pkg/kube/apisix/apis/config/v1/types.go
@@ -55,9 +55,10 @@ type Http struct {
// Path defines an URI based route rule.
type Path struct {
- Path string `json:"path,omitempty" yaml:"path,omitempty"`
- Backend Backend `json:"backend,omitempty" yaml:"backend,omitempty"`
- Plugins []Plugin `json:"plugins,omitempty" yaml:"plugins,omitempty"`
+ Path string `json:"path,omitempty" yaml:"path,omitempty"`
+ Backend Backend `json:"backend,omitempty" yaml:"backend,omitempty"`
+ Timeout *UpstreamTimeout `json:"timeout,omitempty" yaml:"timeout,omitempty"`
+ Plugins []Plugin `json:"plugins,omitempty" yaml:"plugins,omitempty"`
}
// Backend defines an upstream, it should be an existing Kubernetes Service.
diff --git a/pkg/kube/apisix/apis/config/v1/zz_generated.deepcopy.go b/pkg/kube/apisix/apis/config/v1/zz_generated.deepcopy.go
index c0f4d32..2dfed52 100644
--- a/pkg/kube/apisix/apis/config/v1/zz_generated.deepcopy.go
+++ b/pkg/kube/apisix/apis/config/v1/zz_generated.deepcopy.go
@@ -610,6 +610,11 @@ func (in *PassiveHealthCheckUnhealthy) DeepCopy() *PassiveHealthCheckUnhealthy {
func (in *Path) DeepCopyInto(out *Path) {
*out = *in
out.Backend = in.Backend
+ if in.Timeout != nil {
+ in, out := &in.Timeout, &out.Timeout
+ *out = new(UpstreamTimeout)
+ **out = **in
+ }
if in.Plugins != nil {
in, out := &in.Plugins, &out.Plugins
*out = make([]Plugin, len(*in))
diff --git a/pkg/kube/apisix/apis/config/v2alpha1/types.go b/pkg/kube/apisix/apis/config/v2alpha1/types.go
index 44b24b8..2ef0c7f 100644
--- a/pkg/kube/apisix/apis/config/v2alpha1/types.go
+++ b/pkg/kube/apisix/apis/config/v2alpha1/types.go
@@ -90,6 +90,7 @@ type ApisixRouteHTTP struct {
// same URI path (for path matching), route with
// higher priority will take effect.
Priority int `json:"priority,omitempty" yaml:"priority,omitempty"`
+ Timeout *UpstreamTimeout `json:"timeout,omitempty" yaml:"timeout,omitempty"`
Match *ApisixRouteHTTPMatch `json:"match,omitempty" yaml:"match,omitempty"`
// Deprecated: Backend will be removed in the future, use Backends instead.
Backend *ApisixRouteHTTPBackend `json:"backend,omitempty" yaml:"backend,omitempty"`
@@ -195,6 +196,13 @@ type ApisixRouteHTTPPlugin struct {
// any plugins.
type ApisixRouteHTTPPluginConfig map[string]interface{}
+// UpstreamTimeout is settings for the read, send and connect to the upstream.
+type UpstreamTimeout struct {
+ Connect metav1.Duration `json:"connect,omitempty" yaml:"connect,omitempty"`
+ Send metav1.Duration `json:"send,omitempty" yaml:"send,omitempty"`
+ Read metav1.Duration `json:"read,omitempty" yaml:"read,omitempty"`
+}
+
// ApisixRouteAuthentication is the authentication-related
// configuration in ApisixRoute.
type ApisixRouteAuthentication struct {
diff --git a/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go b/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go
index 107459b..b6d05ce 100644
--- a/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go
+++ b/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go
@@ -435,6 +435,11 @@ func (in *ApisixRouteAuthenticationKeyAuth) DeepCopy() *ApisixRouteAuthenticatio
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ApisixRouteHTTP) DeepCopyInto(out *ApisixRouteHTTP) {
*out = *in
+ if in.Timeout != nil {
+ in, out := &in.Timeout, &out.Timeout
+ *out = new(UpstreamTimeout)
+ **out = **in
+ }
if in.Match != nil {
in, out := &in.Match, &out.Match
*out = new(ApisixRouteHTTPMatch)
@@ -758,3 +763,22 @@ func (in *ApisixStatus) DeepCopy() *ApisixStatus {
in.DeepCopyInto(out)
return out
}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *UpstreamTimeout) DeepCopyInto(out *UpstreamTimeout) {
+ *out = *in
+ out.Connect = in.Connect
+ out.Send = in.Send
+ out.Read = in.Read
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpstreamTimeout.
+func (in *UpstreamTimeout) DeepCopy() *UpstreamTimeout {
+ if in == nil {
+ return nil
+ }
+ out := new(UpstreamTimeout)
+ in.DeepCopyInto(out)
+ return out
+}
diff --git a/pkg/kube/apisix/apis/config/v2beta1/types.go b/pkg/kube/apisix/apis/config/v2beta1/types.go
index 2bdfe7f..49c7bef 100644
--- a/pkg/kube/apisix/apis/config/v2beta1/types.go
+++ b/pkg/kube/apisix/apis/config/v2beta1/types.go
@@ -45,6 +45,13 @@ type ApisixRouteSpec struct {
Stream []ApisixRouteStream `json:"stream,omitempty" yaml:"stream,omitempty"`
}
+// UpstreamTimeout is settings for the read, send and connect to the upstream.
+type UpstreamTimeout struct {
+ Connect metav1.Duration `json:"connect,omitempty" yaml:"connect,omitempty"`
+ Send metav1.Duration `json:"send,omitempty" yaml:"send,omitempty"`
+ Read metav1.Duration `json:"read,omitempty" yaml:"read,omitempty"`
+}
+
// ApisixRouteHTTP represents a single route in for HTTP traffic.
type ApisixRouteHTTP struct {
// The rule name, cannot be empty.
@@ -53,6 +60,7 @@ type ApisixRouteHTTP struct {
// same URI path (for path matching), route with
// higher priority will take effect.
Priority int `json:"priority,omitempty" yaml:"priority,omitempty"`
+ Timeout *UpstreamTimeout `json:"timeout,omitempty" yaml:"timeout,omitempty"`
Match ApisixRouteHTTPMatch `json:"match,omitempty" yaml:"match,omitempty"`
// Deprecated: Backend will be removed in the future, use Backends instead.
Backend v2alpha1.ApisixRouteHTTPBackend `json:"backend,omitempty" yaml:"backend,omitempty"`
diff --git a/pkg/kube/apisix/apis/config/v2beta1/zz_generated.deepcopy.go b/pkg/kube/apisix/apis/config/v2beta1/zz_generated.deepcopy.go
index f064c5e..e835ddf 100644
--- a/pkg/kube/apisix/apis/config/v2beta1/zz_generated.deepcopy.go
+++ b/pkg/kube/apisix/apis/config/v2beta1/zz_generated.deepcopy.go
@@ -89,6 +89,11 @@ func (in *ApisixRouteAuthenticationKeyAuth) DeepCopy() *ApisixRouteAuthenticatio
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ApisixRouteHTTP) DeepCopyInto(out *ApisixRouteHTTP) {
*out = *in
+ if in.Timeout != nil {
+ in, out := &in.Timeout, &out.Timeout
+ *out = new(UpstreamTimeout)
+ **out = **in
+ }
in.Match.DeepCopyInto(&out.Match)
in.Backend.DeepCopyInto(&out.Backend)
if in.Backends != nil {
@@ -329,3 +334,22 @@ func (in *ApisixStatus) DeepCopy() *ApisixStatus {
in.DeepCopyInto(out)
return out
}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *UpstreamTimeout) DeepCopyInto(out *UpstreamTimeout) {
+ *out = *in
+ out.Connect = in.Connect
+ out.Send = in.Send
+ out.Read = in.Read
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpstreamTimeout.
+func (in *UpstreamTimeout) DeepCopy() *UpstreamTimeout {
+ if in == nil {
+ return nil
+ }
+ out := new(UpstreamTimeout)
+ in.DeepCopyInto(out)
+ return out
+}
diff --git a/pkg/kube/translation/apisix_route.go b/pkg/kube/translation/apisix_route.go
index 3cd4c76..9f71727 100644
--- a/pkg/kube/translation/apisix_route.go
+++ b/pkg/kube/translation/apisix_route.go
@@ -304,6 +304,22 @@ func (t *translator) translateHTTPRoute(ctx *TranslateContext, ar *configv2alpha
return err
}
+ timeout := &apisixv1.UpstreamTimeout{
+ Connect: apisixv1.DefaultUpstreamTimeout,
+ Read: apisixv1.DefaultUpstreamTimeout,
+ Send: apisixv1.DefaultUpstreamTimeout,
+ }
+ if part.Timeout != nil {
+ if part.Timeout.Connect.Duration > 0 {
+ timeout.Connect = int(part.Timeout.Connect.Seconds())
+ }
+ if part.Timeout.Read.Duration > 0 {
+ timeout.Read = int(part.Timeout.Read.Seconds())
+ }
+ if part.Timeout.Send.Duration > 0 {
+ timeout.Send = int(part.Timeout.Send.Seconds())
+ }
+ }
pluginMap := make(apisixv1.Plugins)
// 2.add route plugins
for _, plugin := range part.Plugins {
@@ -362,6 +378,7 @@ func (t *translator) translateHTTPRoute(ctx *TranslateContext, ar *configv2alpha
route.UpstreamId = id.GenID(upstreamName)
route.EnableWebsocket = part.Websocket
route.Plugins = pluginMap
+ route.Timeout = timeout
if len(backends) > 0 {
weight := _defaultWeight
diff --git a/pkg/types/apisix/v1/types.go b/pkg/types/apisix/v1/types.go
index 2858d53..297f915 100644
--- a/pkg/types/apisix/v1/types.go
+++ b/pkg/types/apisix/v1/types.go
@@ -84,17 +84,18 @@ type Metadata struct {
type Route struct {
Metadata `json:",inline" yaml:",inline"`
- Host string `json:"host,omitempty" yaml:"host,omitempty"`
- Hosts []string `json:"hosts,omitempty" yaml:"hosts,omitempty"`
- Uri string `json:"uri,omitempty" yaml:"uri,omitempty"`
- Priority int `json:"priority,omitempty" yaml:"priority,omitempty"`
- Vars Vars `json:"vars,omitempty" yaml:"vars,omitempty"`
- Uris []string `json:"uris,omitempty" yaml:"uris,omitempty"`
- Methods []string `json:"methods,omitempty" yaml:"methods,omitempty"`
- EnableWebsocket bool `json:"enable_websocket,omitempty" yaml:"enable_websocket,omitempty"`
- RemoteAddrs []string `json:"remote_addrs,omitempty" yaml:"remote_addrs,omitempty"`
- UpstreamId string `json:"upstream_id,omitempty" yaml:"upstream_id,omitempty"`
- Plugins Plugins `json:"plugins,omitempty" yaml:"plugins,omitempty"`
+ Host string `json:"host,omitempty" yaml:"host,omitempty"`
+ Hosts []string `json:"hosts,omitempty" yaml:"hosts,omitempty"`
+ Uri string `json:"uri,omitempty" yaml:"uri,omitempty"`
+ Priority int `json:"priority,omitempty" yaml:"priority,omitempty"`
+ Timeout *UpstreamTimeout `json:"timeout,omitempty" yaml:"timeout,omitempty"`
+ Vars Vars `json:"vars,omitempty" yaml:"vars,omitempty"`
+ Uris []string `json:"uris,omitempty" yaml:"uris,omitempty"`
+ Methods []string `json:"methods,omitempty" yaml:"methods,omitempty"`
+ EnableWebsocket bool `json:"enable_websocket,omitempty" yaml:"enable_websocket,omitempty"`
+ RemoteAddrs []string `json:"remote_addrs,omitempty" yaml:"remote_addrs,omitempty"`
+ UpstreamId string `json:"upstream_id,omitempty" yaml:"upstream_id,omitempty"`
+ Plugins Plugins `json:"plugins,omitempty" yaml:"plugins,omitempty"`
}
// Vars represents the route match expressions of APISIX.
diff --git a/pkg/types/apisix/v1/zz_generated.deepcopy.go b/pkg/types/apisix/v1/zz_generated.deepcopy.go
index 64fcdba..0ca8e2c 100644
--- a/pkg/types/apisix/v1/zz_generated.deepcopy.go
+++ b/pkg/types/apisix/v1/zz_generated.deepcopy.go
@@ -235,6 +235,11 @@ func (in *Route) DeepCopyInto(out *Route) {
*out = make([]string, len(*in))
copy(*out, *in)
}
+ if in.Timeout != nil {
+ in, out := &in.Timeout, &out.Timeout
+ *out = new(UpstreamTimeout)
+ **out = **in
+ }
if in.Vars != nil {
in, out := &in.Vars, &out.Vars
*out = make(Vars, len(*in))
diff --git a/samples/deploy/crd/v1beta1/ApisixRoute.yaml b/samples/deploy/crd/v1beta1/ApisixRoute.yaml
index fafa917..c546fa4 100644
--- a/samples/deploy/crd/v1beta1/ApisixRoute.yaml
+++ b/samples/deploy/crd/v1beta1/ApisixRoute.yaml
@@ -92,6 +92,15 @@ spec:
minLength: 1
priority:
type: integer
+ timeout:
+ type: object
+ properties:
+ connect:
+ type: string
+ send:
+ type: string
+ read:
+ type: string
match:
type: object
required: