diff --git a/charts/kserve-resources/README.md b/charts/kserve-resources/README.md index 2cee4c9eefc..f7a73a9bf59 100644 --- a/charts/kserve-resources/README.md +++ b/charts/kserve-resources/README.md @@ -26,9 +26,9 @@ $ helm install kserve oci://ghcr.io/kserve/charts/kserve --version v0.12.1 | kserve.controller.gateway.domainTemplate | string | `"{{ .Name }}-{{ .Namespace }}.{{ .IngressDomain }}"` | | | kserve.controller.gateway.ingressGateway.className | string | `"istio"` | | | kserve.controller.gateway.ingressGateway.gateway | string | `"knative-serving/knative-ingress-gateway"` | | -| kserve.controller.gateway.ingressGateway.gatewayService | string | `"istio-ingressgateway.istio-system.svc.cluster.local"` | | | kserve.controller.gateway.localGateway.gateway | string | `"knative-serving/knative-local-gateway"` | | | kserve.controller.gateway.localGateway.gatewayService | string | `"knative-local-gateway.istio-system.svc.cluster.local"` | | +| kserve.controller.gateway.localGateway.knativeGatewayService | string | `""` | | | kserve.controller.gateway.urlScheme | string | `"http"` | | | kserve.controller.image | string | `"kserve/kserve-controller"` | | | kserve.controller.nodeSelector | object | `{}` | | diff --git a/charts/kserve-resources/templates/configmap.yaml b/charts/kserve-resources/templates/configmap.yaml index e5e8ff6ca49..3f4dec1c9cc 100644 --- a/charts/kserve-resources/templates/configmap.yaml +++ b/charts/kserve-resources/templates/configmap.yaml @@ -193,7 +193,6 @@ data: ingress: |- { "ingressGateway" : "knative-serving/knative-ingress-gateway", - "ingressService" : "istio-ingressgateway.istio-system.svc.cluster.local", "localGateway" : "knative-serving/knative-local-gateway", "localGatewayService" : "knative-local-gateway.istio-system.svc.cluster.local", "ingressDomain" : "example.com", @@ -210,9 +209,15 @@ data: # NOTE: This configuration only applicable for serverless deployment with Istio configured as network layer. "ingressGateway" : "knative-serving/knative-ingress-gateway", - # ingressService specifies the hostname of the ingress service. + # knativeLocalGatewayService specifies the hostname of the Knative's local gateway serivice. + # The default KServe configurations are re-using the Istio local gateways for Knative. In this case, this + # knativeLocalGatewayService field can be left unset. When unset, the value of "localGatewayService" will be used. + # However, sometimes it may be better to have local gateways specifically for KServe (e.g. when enabling strict mTLS in Istio). + # Under such setups where KServe is needed to have its own local gateways, the values of the "localGateway" and + # "localGatewayService" should point to the KServe local gateways. Then, this knativeLocalGatewayService field + # should point to the Knative's local gateway service. # NOTE: This configuration only applicable for serverless deployment with Istio configured as network layer. - "ingressService" : "istio-ingressgateway.istio-system.svc.cluster.local", + "knativeLocalGatewayService": "", # localGateway specifies the gateway which handles the network traffic within the cluster. # NOTE: This configuration only applicable for serverless deployment with Istio configured as network layer. @@ -507,7 +512,7 @@ data: ingress: |- { "ingressGateway" : "{{ .Values.kserve.controller.gateway.ingressGateway.gateway }}", - "ingressService" : "{{ .Values.kserve.controller.gateway.ingressGateway.gatewayService }}", + "knativeLocalGatewayService" : "{{ .Values.kserve.controller.gateway.localGateway.knativeGatewayService }}", "localGateway" : "{{ .Values.kserve.controller.gateway.localGateway.gateway }}", "localGatewayService" : "{{ .Values.kserve.controller.gateway.localGateway.gatewayService }}", "ingressClassName" : "{{ .Values.kserve.controller.gateway.ingressGateway.className }}", diff --git a/charts/kserve-resources/values.yaml b/charts/kserve-resources/values.yaml index cf6f599bc75..d831401117a 100644 --- a/charts/kserve-resources/values.yaml +++ b/charts/kserve-resources/values.yaml @@ -42,9 +42,9 @@ kserve: localGateway: gateway: knative-serving/knative-local-gateway gatewayService: knative-local-gateway.istio-system.svc.cluster.local + knativeGatewayService: "" ingressGateway: gateway: knative-serving/knative-ingress-gateway - gatewayService: istio-ingressgateway.istio-system.svc.cluster.local className: istio nodeSelector: {} tolerations: [] diff --git a/config/configmap/inferenceservice.yaml b/config/configmap/inferenceservice.yaml index f79aa0039ac..d9e73aac70c 100644 --- a/config/configmap/inferenceservice.yaml +++ b/config/configmap/inferenceservice.yaml @@ -204,7 +204,6 @@ data: ingress: |- { "ingressGateway" : "knative-serving/knative-ingress-gateway", - "ingressService" : "istio-ingressgateway.istio-system.svc.cluster.local", "localGateway" : "knative-serving/knative-local-gateway", "localGatewayService" : "knative-local-gateway.istio-system.svc.cluster.local", "ingressDomain" : "example.com", @@ -221,9 +220,15 @@ data: # NOTE: This configuration only applicable for serverless deployment with Istio configured as network layer. "ingressGateway" : "knative-serving/knative-ingress-gateway", - # ingressService specifies the hostname of the ingress service. + # knativeLocalGatewayService specifies the hostname of the Knative's local gateway serivice. + # The default KServe configurations are re-using the Istio local gateways for Knative. In this case, this + # knativeLocalGatewayService field can be left unset. When unset, the value of "localGatewayService" will be used. + # However, sometimes it may be better to have local gateways specifically for KServe (e.g. when enabling strict mTLS in Istio). + # Under such setups where KServe is needed to have its own local gateways, the values of the "localGateway" and + # "localGatewayService" should point to the KServe local gateways. Then, this knativeLocalGatewayService field + # should point to the Knative's local gateway service. # NOTE: This configuration only applicable for serverless deployment with Istio configured as network layer. - "ingressService" : "istio-ingressgateway.istio-system.svc.cluster.local", + "knativeLocalGatewayService": "", # localGateway specifies the gateway which handles the network traffic within the cluster. # NOTE: This configuration only applicable for serverless deployment with Istio configured as network layer. @@ -506,7 +511,6 @@ data: ingress: |- { "ingressGateway" : "knative-serving/knative-ingress-gateway", - "ingressService" : "istio-ingressgateway.istio-system.svc.cluster.local", "localGateway" : "knative-serving/knative-local-gateway", "localGatewayService" : "knative-local-gateway.istio-system.svc.cluster.local", "ingressDomain" : "example.com", diff --git a/config/overlays/odh/inferenceservice-config-patch.yaml b/config/overlays/odh/inferenceservice-config-patch.yaml index 3da6fef3e49..950b5eb0fd2 100644 --- a/config/overlays/odh/inferenceservice-config-patch.yaml +++ b/config/overlays/odh/inferenceservice-config-patch.yaml @@ -12,19 +12,25 @@ data: "memoryLimit": "1Gi", "cpuRequest": "100m", "cpuLimit": "1", - "enableDirectPvcVolumeMount": true + "caBundleConfigMapName": "", + "caBundleVolumeMountPath": "/etc/ssl/custom-certs", + "enableDirectPvcVolumeMount": true, + "enableModelcar": false, + "cpuModelcar": "10m", + "memoryModelcar": "15Mi" } ingress: |- { "ingressGateway" : "knative-serving/knative-ingress-gateway", - "ingressService" : "istio-ingressgateway.istio-system.svc.cluster.local", + "knativeLocalGatewayService" : "knative-local-gateway.istio-system.svc.cluster.local", + "ingressService" : "need.to.delete", "localGateway" : "istio-system/kserve-local-gateway", "localGatewayService" : "kserve-local-gateway.istio-system.svc.cluster.local", "ingressDomain" : "example.com", "ingressClassName" : "istio", "domainTemplate": "{{ .Name }}-{{ .Namespace }}.{{ .IngressDomain }}", "urlScheme": "https", - "disableIstioVirtualHost": false, + "disableIstioVirtualHost": false, "disableIngressCreation": true } logger: |- @@ -42,7 +48,9 @@ data: "memoryRequest": "1Gi", "memoryLimit": "1Gi", "cpuRequest": "1", - "cpuLimit": "1" + "cpuLimit": "1", + "maxBatchSize": "32", + "maxLatency": "5000" } agent: |- { @@ -60,12 +68,3 @@ data: "cpuRequest": "100m", "cpuLimit": "1" } - deploy: |- - { - "defaultDeploymentMode": "Serverless" - } - metricsAggregator: |- - { - "enableMetricAggregation": "false", - "enablePrometheusScraping" : "false" - } diff --git a/config/overlays/test/configmap/inferenceservice-disable-istio.yaml b/config/overlays/test/configmap/inferenceservice-disable-istio.yaml index 92b11eca24c..c96d934e11f 100644 --- a/config/overlays/test/configmap/inferenceservice-disable-istio.yaml +++ b/config/overlays/test/configmap/inferenceservice-disable-istio.yaml @@ -7,7 +7,6 @@ data: ingress: |- { "ingressGateway" : "knative-serving/knative-ingress-gateway", - "ingressService" : "istio-ingressgateway.istio-system.svc.cluster.local", "localGateway" : "knative-serving/knative-local-gateway", "localGatewayService" : "knative-local-gateway.istio-system.svc.cluster.local", "ingressDomain" : "example.com", diff --git a/config/overlays/test/configmap/inferenceservice-ingress.yaml b/config/overlays/test/configmap/inferenceservice-ingress.yaml index 07f2a7ded09..323784eb21a 100644 --- a/config/overlays/test/configmap/inferenceservice-ingress.yaml +++ b/config/overlays/test/configmap/inferenceservice-ingress.yaml @@ -7,7 +7,6 @@ data: ingress: |- { "ingressGateway" : "knative-serving/knative-ingress-gateway", - "ingressService" : "istio-ingressgateway.istio-system.svc.cluster.local", "localGateway": "knative-serving/knative-local-gateway", "localGatewayService" : "knative-local-gateway.istio-system.svc.cluster.local", "ingressClassName" : "istio", diff --git a/config/overlays/test/configmap/inferenceservice.yaml b/config/overlays/test/configmap/inferenceservice.yaml index f9ba5fb5d67..3ec32684cf7 100644 --- a/config/overlays/test/configmap/inferenceservice.yaml +++ b/config/overlays/test/configmap/inferenceservice.yaml @@ -36,7 +36,6 @@ data: ingress: |- { "ingressGateway" : "knative-serving/knative-ingress-gateway", - "ingressService" : "istio-ingressgateway.istio-system.svc.cluster.local", "localGateway": "knative-serving/knative-local-gateway", "localGatewayService" : "knative-local-gateway.istio-system.svc.cluster.local", "ingressClassName" : "istio", diff --git a/hack/violation_exceptions.list b/hack/violation_exceptions.list index ce9f95bea4a..140cb3d00c8 100644 --- a/hack/violation_exceptions.list +++ b/hack/violation_exceptions.list @@ -31,7 +31,6 @@ API rule violation: names_match,github.com/kserve/kserve/pkg/apis/serving/v1beta API rule violation: names_match,github.com/kserve/kserve/pkg/apis/serving/v1beta1,ExplainerExtensionSpec,StorageURI API rule violation: names_match,github.com/kserve/kserve/pkg/apis/serving/v1beta1,ExplainersConfig,ARTExplainer API rule violation: names_match,github.com/kserve/kserve/pkg/apis/serving/v1beta1,ExplainersConfig,AlibiExplainer -API rule violation: names_match,github.com/kserve/kserve/pkg/apis/serving/v1beta1,IngressConfig,IngressServiceName API rule violation: names_match,github.com/kserve/kserve/pkg/apis/serving/v1beta1,IngressConfig,LocalGatewayServiceName API rule violation: names_match,github.com/kserve/kserve/pkg/apis/serving/v1beta1,ModelStatus,ModelCopies API rule violation: names_match,github.com/kserve/kserve/pkg/apis/serving/v1beta1,ModelStatus,ModelRevisionStates diff --git a/pkg/apis/serving/v1beta1/configmap.go b/pkg/apis/serving/v1beta1/configmap.go index 375f1aec670..ce8f4d55921 100644 --- a/pkg/apis/serving/v1beta1/configmap.go +++ b/pkg/apis/serving/v1beta1/configmap.go @@ -66,17 +66,17 @@ type InferenceServicesConfig struct { // +kubebuilder:object:generate=false type IngressConfig struct { - IngressGateway string `json:"ingressGateway,omitempty"` - IngressServiceName string `json:"ingressService,omitempty"` - LocalGateway string `json:"localGateway,omitempty"` - LocalGatewayServiceName string `json:"localGatewayService,omitempty"` - IngressDomain string `json:"ingressDomain,omitempty"` - IngressClassName *string `json:"ingressClassName,omitempty"` - DomainTemplate string `json:"domainTemplate,omitempty"` - UrlScheme string `json:"urlScheme,omitempty"` - DisableIstioVirtualHost bool `json:"disableIstioVirtualHost,omitempty"` - PathTemplate string `json:"pathTemplate,omitempty"` - DisableIngressCreation bool `json:"disableIngressCreation,omitempty"` + IngressGateway string `json:"ingressGateway,omitempty"` + KnativeLocalGatewayService string `json:"knativeLocalGatewayService,omitempty"` + LocalGateway string `json:"localGateway,omitempty"` + LocalGatewayServiceName string `json:"localGatewayService,omitempty"` + IngressDomain string `json:"ingressDomain,omitempty"` + IngressClassName *string `json:"ingressClassName,omitempty"` + DomainTemplate string `json:"domainTemplate,omitempty"` + UrlScheme string `json:"urlScheme,omitempty"` + DisableIstioVirtualHost bool `json:"disableIstioVirtualHost,omitempty"` + PathTemplate string `json:"pathTemplate,omitempty"` + DisableIngressCreation bool `json:"disableIngressCreation,omitempty"` } // +kubebuilder:object:generate=false @@ -112,8 +112,8 @@ func NewIngressConfig(clientset kubernetes.Interface) (*IngressConfig, error) { return nil, fmt.Errorf("unable to parse ingress config json: %v", err) } - if ingressConfig.IngressGateway == "" || ingressConfig.IngressServiceName == "" { - return nil, fmt.Errorf("invalid ingress config - ingressGateway and ingressService are required") + if ingressConfig.IngressGateway == "" { + return nil, fmt.Errorf("invalid ingress config - ingressGateway is required") } if ingressConfig.PathTemplate != "" { // TODO: ensure that the generated path is valid, that is: @@ -128,6 +128,10 @@ func NewIngressConfig(clientset kubernetes.Interface) (*IngressConfig, error) { return nil, fmt.Errorf("invalid ingress config - ingressDomain is required if pathTemplate is given") } } + + if len(ingressConfig.KnativeLocalGatewayService) == 0 { + ingressConfig.KnativeLocalGatewayService = ingressConfig.LocalGatewayServiceName + } } if ingressConfig.DomainTemplate == "" { diff --git a/pkg/apis/serving/v1beta1/configmap_test.go b/pkg/apis/serving/v1beta1/configmap_test.go index 1410eeee8ff..33266adca4a 100644 --- a/pkg/apis/serving/v1beta1/configmap_test.go +++ b/pkg/apis/serving/v1beta1/configmap_test.go @@ -18,6 +18,7 @@ package v1beta1 import ( ctx "context" + "fmt" logger "log" "testing" @@ -30,6 +31,27 @@ import ( fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake" ) +var ( + KnativeIngressGateway = "knative-serving/knative-ingress-gateway" + KnativeLocalGatewayService = "test-destination" + KnativeLocalGateway = "knative-serving/knative-local-gateway" + LocalGatewayService = "knative-local-gateway.istio-system.svc.cluster.local" + UrlScheme = "https" + IngressDomain = "example.com" + AdditionalDomain = "additional-example.com" + AdditionalDomainExtra = "additional-example-extra.com" + IngressConfigData = fmt.Sprintf(`{ + "ingressGateway" : "%s", + "knativeLocalGatewayService" : "%s", + "localGateway" : "%s", + "localGatewayService" : "%s", + "ingressDomain": "%s", + "urlScheme": "https", + "additionalIngressDomains": ["%s","%s"] + }`, KnativeIngressGateway, KnativeLocalGatewayService, KnativeLocalGateway, LocalGatewayService, IngressDomain, + AdditionalDomain, AdditionalDomainExtra) +) + func createFakeClient() client.WithWatch { clientBuilder := fakeclient.NewClientBuilder() fakeClient := clientBuilder.Build() @@ -91,10 +113,42 @@ func TestNewIngressConfig(t *testing.T) { g := gomega.NewGomegaWithT(t) clientset := fakeclientset.NewSimpleClientset(&v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{Name: constants.InferenceServiceConfigMapName, Namespace: constants.KServeNamespace}, + Data: map[string]string{ + IngressConfigKeyName: IngressConfigData, + }, + }) + ingressCfg, err := NewIngressConfig(clientset) + g.Expect(err).Should(gomega.BeNil()) + g.Expect(ingressCfg).ShouldNot(gomega.BeNil()) + + g.Expect(ingressCfg.IngressGateway).To(gomega.Equal(KnativeIngressGateway)) + g.Expect(ingressCfg.KnativeLocalGatewayService).To(gomega.Equal(KnativeLocalGatewayService)) + g.Expect(ingressCfg.LocalGateway).To(gomega.Equal(KnativeLocalGateway)) + g.Expect(ingressCfg.LocalGatewayServiceName).To(gomega.Equal(LocalGatewayService)) + g.Expect(ingressCfg.UrlScheme).To(gomega.Equal(UrlScheme)) + g.Expect(ingressCfg.IngressDomain).To(gomega.Equal(IngressDomain)) +} + +func TestNewIngressConfigDefaultKnativeService(t *testing.T) { + g := gomega.NewGomegaWithT(t) + clientset := fakeclientset.NewSimpleClientset(&v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Name: constants.InferenceServiceConfigMapName, Namespace: constants.KServeNamespace}, + Data: map[string]string{ + IngressConfigKeyName: fmt.Sprintf(`{ + "ingressGateway" : "%s", + "localGateway" : "%s", + "localGatewayService" : "%s", + "ingressDomain": "%s", + "urlScheme": "https", + "additionalIngressDomains": ["%s","%s"] + }`, KnativeIngressGateway, KnativeLocalGateway, LocalGatewayService, IngressDomain, + AdditionalDomain, AdditionalDomainExtra), + }, }) ingressCfg, err := NewIngressConfig(clientset) g.Expect(err).Should(gomega.BeNil()) g.Expect(ingressCfg).ShouldNot(gomega.BeNil()) + g.Expect(ingressCfg.KnativeLocalGatewayService).To(gomega.Equal(LocalGatewayService)) } func TestNewDeployConfig(t *testing.T) { diff --git a/pkg/apis/serving/v1beta1/openapi_generated.go b/pkg/apis/serving/v1beta1/openapi_generated.go index 7d82faec4ca..00594d52629 100644 --- a/pkg/apis/serving/v1beta1/openapi_generated.go +++ b/pkg/apis/serving/v1beta1/openapi_generated.go @@ -5265,7 +5265,7 @@ func schema_pkg_apis_serving_v1beta1_IngressConfig(ref common.ReferenceCallback) Format: "", }, }, - "ingressService": { + "knativeLocalGatewayService": { SchemaProps: spec.SchemaProps{ Type: []string{"string"}, Format: "", diff --git a/pkg/apis/serving/v1beta1/swagger.json b/pkg/apis/serving/v1beta1/swagger.json index cff2c8ce734..69485e5ad02 100644 --- a/pkg/apis/serving/v1beta1/swagger.json +++ b/pkg/apis/serving/v1beta1/swagger.json @@ -2912,7 +2912,7 @@ "ingressGateway": { "type": "string" }, - "ingressService": { + "knativeLocalGatewayService": { "type": "string" }, "localGateway": { diff --git a/pkg/controller/v1beta1/inferenceservice/controller_test.go b/pkg/controller/v1beta1/inferenceservice/controller_test.go index 89f9ee71bee..e83c05e87b5 100644 --- a/pkg/controller/v1beta1/inferenceservice/controller_test.go +++ b/pkg/controller/v1beta1/inferenceservice/controller_test.go @@ -76,7 +76,6 @@ var _ = Describe("v1beta1 inference service controller", func() { }`, "ingress": `{ "ingressGateway": "knative-serving/knative-ingress-gateway", - "ingressService": "test-destination", "localGateway": "knative-serving/knative-local-gateway", "localGatewayService": "knative-local-gateway.istio-system.svc.cluster.local" }`, @@ -2079,7 +2078,6 @@ var _ = Describe("v1beta1 inference service controller", func() { copiedConfigs[key] = `{ "disableIstioVirtualHost": true, "ingressGateway": "knative-serving/knative-ingress-gateway", - "ingressService": "test-destination", "localGateway": "knative-serving/knative-local-gateway", "localGatewayService": "knative-local-gateway.istio-system.svc.cluster.local" }` diff --git a/pkg/controller/v1beta1/inferenceservice/rawkube_controller_test.go b/pkg/controller/v1beta1/inferenceservice/rawkube_controller_test.go index 789983c7041..ad31abe91df 100644 --- a/pkg/controller/v1beta1/inferenceservice/rawkube_controller_test.go +++ b/pkg/controller/v1beta1/inferenceservice/rawkube_controller_test.go @@ -74,7 +74,6 @@ var _ = Describe("v1beta1 inference service controller", func() { }`, "ingress": `{ "ingressGateway": "knative-serving/knative-ingress-gateway", - "ingressService": "test-destination", "localGateway": "knative-serving/knative-local-gateway", "localGatewayService": "knative-local-gateway.istio-system.svc.cluster.local" }`, @@ -1275,7 +1274,6 @@ var _ = Describe("v1beta1 inference service controller", func() { }`, "ingress": `{ "ingressGateway": "knative-serving/knative-ingress-gateway", - "ingressService": "test-destination", "localGateway": "knative-serving/knative-local-gateway", "localGatewayService": "knative-local-gateway.istio-system.svc.cluster.local", "ingressDomain": "example.com" @@ -1707,7 +1705,6 @@ var _ = Describe("v1beta1 inference service controller", func() { }`, "ingress": `{ "ingressGateway": "knative-serving/knative-ingress-gateway", - "ingressService": "test-destination", "localGateway": "knative-serving/knative-local-gateway", "localGatewayService": "knative-local-gateway.istio-system.svc.cluster.local", "ingressDomain": "example.com", diff --git a/pkg/controller/v1beta1/inferenceservice/reconcilers/ingress/ingress_reconciler.go b/pkg/controller/v1beta1/inferenceservice/reconcilers/ingress/ingress_reconciler.go index 1c8a8aec660..39acfbad2b8 100644 --- a/pkg/controller/v1beta1/inferenceservice/reconcilers/ingress/ingress_reconciler.go +++ b/pkg/controller/v1beta1/inferenceservice/reconcilers/ingress/ingress_reconciler.go @@ -341,7 +341,7 @@ func createIngress(isvc *v1beta1.InferenceService, useDefault bool, config *v1be Match: createHTTPMatchRequest(constants.ExplainPrefix(), serviceHost, network.GetServiceHostname(isvc.Name, isvc.Namespace), isInternal, config), Route: []*istiov1beta1.HTTPRouteDestination{ - createHTTPRouteDestination(config.LocalGatewayServiceName), + createHTTPRouteDestination(config.KnativeLocalGatewayService), }, Headers: &istiov1beta1.Headers{ Request: &istiov1beta1.Headers_HeaderOperations{ @@ -358,7 +358,7 @@ func createIngress(isvc *v1beta1.InferenceService, useDefault bool, config *v1be Match: createHTTPMatchRequest("", serviceHost, network.GetServiceHostname(isvc.Name, isvc.Namespace), isInternal, config), Route: []*istiov1beta1.HTTPRouteDestination{ - createHTTPRouteDestination(config.LocalGatewayServiceName), + createHTTPRouteDestination(config.KnativeLocalGatewayService), }, Headers: &istiov1beta1.Headers{ Request: &istiov1beta1.Headers_HeaderOperations{ @@ -422,7 +422,7 @@ func createIngress(isvc *v1beta1.InferenceService, useDefault bool, config *v1be Uri: "/", }, Route: []*istiov1beta1.HTTPRouteDestination{ - createHTTPRouteDestination(config.LocalGatewayServiceName), + createHTTPRouteDestination(config.KnativeLocalGatewayService), }, Headers: &istiov1beta1.Headers{ Request: &istiov1beta1.Headers_HeaderOperations{ diff --git a/pkg/controller/v1beta1/inferenceservice/reconcilers/ingress/ingress_reconciler_test.go b/pkg/controller/v1beta1/inferenceservice/reconcilers/ingress/ingress_reconciler_test.go index fc8a38b9e0b..7a83679dbf2 100644 --- a/pkg/controller/v1beta1/inferenceservice/reconcilers/ingress/ingress_reconciler_test.go +++ b/pkg/controller/v1beta1/inferenceservice/reconcilers/ingress/ingress_reconciler_test.go @@ -41,6 +41,7 @@ func TestCreateVirtualService(t *testing.T) { annotations := map[string]string{"test": "test"} isvcAnnotations := map[string]string{"test": "test", "kubectl.kubernetes.io/last-applied-configuration": "test"} labels := map[string]string{"test": "test"} + knativeLocalGatewayService := "someIngressServiceName" domain := "example.com" serviceHostName := constants.InferenceServiceHostName(serviceName, namespace, domain) serviceInternalHostName := network.GetServiceHostname(serviceName, namespace) @@ -79,10 +80,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "predictor missing url", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -94,10 +95,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "found predictor status", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -134,7 +135,7 @@ func TestCreateVirtualService(t *testing.T) { Match: predictorRouteMatch, Route: []*istiov1beta1.HTTPRouteDestination{ { - Destination: &istiov1beta1.Destination{Host: constants.LocalGatewayHost, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, + Destination: &istiov1beta1.Destination{Host: knativeLocalGatewayService, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, Weight: 100, }, }, @@ -149,10 +150,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "local cluster predictor", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -198,7 +199,7 @@ func TestCreateVirtualService(t *testing.T) { }, Route: []*istiov1beta1.HTTPRouteDestination{ { - Destination: &istiov1beta1.Destination{Host: constants.LocalGatewayHost, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, + Destination: &istiov1beta1.Destination{Host: knativeLocalGatewayService, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, Weight: 100, }, }, @@ -214,10 +215,10 @@ func TestCreateVirtualService(t *testing.T) { { name: "nil transformer status fails with status unknown", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -241,10 +242,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "found transformer and predictor status", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -297,7 +298,7 @@ func TestCreateVirtualService(t *testing.T) { Match: predictorRouteMatch, Route: []*istiov1beta1.HTTPRouteDestination{ { - Destination: &istiov1beta1.Destination{Host: constants.LocalGatewayHost, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, + Destination: &istiov1beta1.Destination{Host: knativeLocalGatewayService, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, Weight: 100, }, }, @@ -313,10 +314,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "found transformer and predictor status", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -369,7 +370,7 @@ func TestCreateVirtualService(t *testing.T) { Match: predictorRouteMatch, Route: []*istiov1beta1.HTTPRouteDestination{ { - Destination: &istiov1beta1.Destination{Host: constants.LocalGatewayHost, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, + Destination: &istiov1beta1.Destination{Host: knativeLocalGatewayService, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, Weight: 100, }, }, @@ -385,10 +386,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "nil explainer status fails with status unknown", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -412,10 +413,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "found explainer and predictor status", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -495,7 +496,7 @@ func TestCreateVirtualService(t *testing.T) { }, Route: []*istiov1beta1.HTTPRouteDestination{ { - Destination: &istiov1beta1.Destination{Host: constants.LocalGatewayHost, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, + Destination: &istiov1beta1.Destination{Host: knativeLocalGatewayService, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, Weight: 100, }, }, @@ -509,7 +510,7 @@ func TestCreateVirtualService(t *testing.T) { Match: predictorRouteMatch, Route: []*istiov1beta1.HTTPRouteDestination{ { - Destination: &istiov1beta1.Destination{Host: constants.LocalGatewayHost, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, + Destination: &istiov1beta1.Destination{Host: knativeLocalGatewayService, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, Weight: 100, }, }, @@ -525,14 +526,14 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "found predictor status with path template", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", - UrlScheme: "http", - IngressDomain: "my-domain.com", - PathTemplate: "/serving/{{ .Namespace }}/{{ .Name }}", - DisableIstioVirtualHost: false, + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + UrlScheme: "http", + IngressDomain: "my-domain.com", + PathTemplate: "/serving/{{ .Namespace }}/{{ .Name }}", + DisableIstioVirtualHost: false, }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -586,7 +587,7 @@ func TestCreateVirtualService(t *testing.T) { }, Route: []*istiov1beta1.HTTPRouteDestination{ { - Destination: &istiov1beta1.Destination{Host: constants.LocalGatewayHost, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, + Destination: &istiov1beta1.Destination{Host: knativeLocalGatewayService, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, Weight: 100, }, }, @@ -628,7 +629,7 @@ func TestCreateVirtualService(t *testing.T) { Uri: "/", }, Route: []*istiov1beta1.HTTPRouteDestination{ - createHTTPRouteDestination("knative-local-gateway.istio-system.svc.cluster.local"), + createHTTPRouteDestination(knativeLocalGatewayService), }, Headers: &istiov1beta1.Headers{ Request: &istiov1beta1.Headers_HeaderOperations{ @@ -644,10 +645,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "found predictor status with default suffix", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: true, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -684,7 +685,7 @@ func TestCreateVirtualService(t *testing.T) { Match: predictorRouteMatch, Route: []*istiov1beta1.HTTPRouteDestination{ { - Destination: &istiov1beta1.Destination{Host: constants.LocalGatewayHost, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, + Destination: &istiov1beta1.Destination{Host: knativeLocalGatewayService, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, Weight: 100, }, }, @@ -699,10 +700,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "found transformer and predictor status with default suffix", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: true, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -755,7 +756,7 @@ func TestCreateVirtualService(t *testing.T) { Match: predictorRouteMatch, Route: []*istiov1beta1.HTTPRouteDestination{ { - Destination: &istiov1beta1.Destination{Host: constants.LocalGatewayHost, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, + Destination: &istiov1beta1.Destination{Host: knativeLocalGatewayService, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, Weight: 100, }, }, @@ -771,10 +772,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "transformer is not ready", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: true, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -821,10 +822,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "nil explainer status fails with status unknown", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -848,10 +849,10 @@ func TestCreateVirtualService(t *testing.T) { }, { name: "explainer is not ready", ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -911,10 +912,10 @@ func TestCreateVirtualService(t *testing.T) { }, }, ingressConfig: &v1beta1.IngressConfig{ - IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", - LocalGateway: constants.KnativeLocalGateway, - LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", + IngressGateway: constants.KnativeIngressGateway, + KnativeLocalGatewayService: knativeLocalGatewayService, + LocalGateway: constants.KnativeLocalGateway, + LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", }, useDefault: false, componentStatus: &v1beta1.InferenceServiceStatus{ @@ -962,7 +963,7 @@ func TestCreateVirtualService(t *testing.T) { }, Route: []*istiov1beta1.HTTPRouteDestination{ { - Destination: &istiov1beta1.Destination{Host: constants.LocalGatewayHost, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, + Destination: &istiov1beta1.Destination{Host: knativeLocalGatewayService, Port: &istiov1beta1.PortSelector{Number: constants.CommonDefaultHttpPort}}, Weight: 100, }, }, diff --git a/pkg/controller/v1beta1/inferenceservice/suite_test.go b/pkg/controller/v1beta1/inferenceservice/suite_test.go index 1bb29c5427e..1b891d6e793 100644 --- a/pkg/controller/v1beta1/inferenceservice/suite_test.go +++ b/pkg/controller/v1beta1/inferenceservice/suite_test.go @@ -105,7 +105,6 @@ var _ = BeforeSuite(func() { deployConfig := &v1beta1.DeployConfig{DefaultDeploymentMode: "Serverless"} ingressConfig := &v1beta1.IngressConfig{ IngressGateway: constants.KnativeIngressGateway, - IngressServiceName: "someIngressServiceName", LocalGateway: constants.KnativeLocalGateway, LocalGatewayServiceName: "knative-local-gateway.istio-system.svc.cluster.local", DisableIstioVirtualHost: false, diff --git a/python/kserve/docs/V1beta1IngressConfig.md b/python/kserve/docs/V1beta1IngressConfig.md index f81b653be58..3b47f6891e9 100644 --- a/python/kserve/docs/V1beta1IngressConfig.md +++ b/python/kserve/docs/V1beta1IngressConfig.md @@ -9,7 +9,7 @@ Name | Type | Description | Notes **ingress_class_name** | **str** | | [optional] **ingress_domain** | **str** | | [optional] **ingress_gateway** | **str** | | [optional] -**ingress_service** | **str** | | [optional] +**knative_local_gateway_service** | **str** | | [optional] **local_gateway** | **str** | | [optional] **local_gateway_service** | **str** | | [optional] **path_template** | **str** | | [optional] diff --git a/python/kserve/kserve/models/v1beta1_ingress_config.py b/python/kserve/kserve/models/v1beta1_ingress_config.py index f8596ae0109..a43da88e5b3 100644 --- a/python/kserve/kserve/models/v1beta1_ingress_config.py +++ b/python/kserve/kserve/models/v1beta1_ingress_config.py @@ -53,7 +53,7 @@ class V1beta1IngressConfig(object): 'ingress_class_name': 'str', 'ingress_domain': 'str', 'ingress_gateway': 'str', - 'ingress_service': 'str', + 'knative_local_gateway_service': 'str', 'local_gateway': 'str', 'local_gateway_service': 'str', 'path_template': 'str', @@ -67,14 +67,14 @@ class V1beta1IngressConfig(object): 'ingress_class_name': 'ingressClassName', 'ingress_domain': 'ingressDomain', 'ingress_gateway': 'ingressGateway', - 'ingress_service': 'ingressService', + 'knative_local_gateway_service': 'knativeLocalGatewayService', 'local_gateway': 'localGateway', 'local_gateway_service': 'localGatewayService', 'path_template': 'pathTemplate', 'url_scheme': 'urlScheme' } - def __init__(self, disable_ingress_creation=None, disable_istio_virtual_host=None, domain_template=None, ingress_class_name=None, ingress_domain=None, ingress_gateway=None, ingress_service=None, local_gateway=None, local_gateway_service=None, path_template=None, url_scheme=None, local_vars_configuration=None): # noqa: E501 + def __init__(self, disable_ingress_creation=None, disable_istio_virtual_host=None, domain_template=None, ingress_class_name=None, ingress_domain=None, ingress_gateway=None, knative_local_gateway_service=None, local_gateway=None, local_gateway_service=None, path_template=None, url_scheme=None, local_vars_configuration=None): # noqa: E501 """V1beta1IngressConfig - a model defined in OpenAPI""" # noqa: E501 if local_vars_configuration is None: local_vars_configuration = Configuration() @@ -86,7 +86,7 @@ def __init__(self, disable_ingress_creation=None, disable_istio_virtual_host=Non self._ingress_class_name = None self._ingress_domain = None self._ingress_gateway = None - self._ingress_service = None + self._knative_local_gateway_service = None self._local_gateway = None self._local_gateway_service = None self._path_template = None @@ -105,8 +105,8 @@ def __init__(self, disable_ingress_creation=None, disable_istio_virtual_host=Non self.ingress_domain = ingress_domain if ingress_gateway is not None: self.ingress_gateway = ingress_gateway - if ingress_service is not None: - self.ingress_service = ingress_service + if knative_local_gateway_service is not None: + self.knative_local_gateway_service = knative_local_gateway_service if local_gateway is not None: self.local_gateway = local_gateway if local_gateway_service is not None: @@ -243,25 +243,25 @@ def ingress_gateway(self, ingress_gateway): self._ingress_gateway = ingress_gateway @property - def ingress_service(self): - """Gets the ingress_service of this V1beta1IngressConfig. # noqa: E501 + def knative_local_gateway_service(self): + """Gets the knative_local_gateway_service of this V1beta1IngressConfig. # noqa: E501 - :return: The ingress_service of this V1beta1IngressConfig. # noqa: E501 + :return: The knative_local_gateway_service of this V1beta1IngressConfig. # noqa: E501 :rtype: str """ - return self._ingress_service + return self._knative_local_gateway_service - @ingress_service.setter - def ingress_service(self, ingress_service): - """Sets the ingress_service of this V1beta1IngressConfig. + @knative_local_gateway_service.setter + def knative_local_gateway_service(self, knative_local_gateway_service): + """Sets the knative_local_gateway_service of this V1beta1IngressConfig. - :param ingress_service: The ingress_service of this V1beta1IngressConfig. # noqa: E501 + :param knative_local_gateway_service: The knative_local_gateway_service of this V1beta1IngressConfig. # noqa: E501 :type: str """ - self._ingress_service = ingress_service + self._knative_local_gateway_service = knative_local_gateway_service @property def local_gateway(self): diff --git a/python/kserve/test/test_v1beta1_ingress_config.py b/python/kserve/test/test_v1beta1_ingress_config.py index 71974a82f7a..f1d58af05f8 100644 --- a/python/kserve/test/test_v1beta1_ingress_config.py +++ b/python/kserve/test/test_v1beta1_ingress_config.py @@ -50,8 +50,7 @@ def make_instance(self, include_optional): # model = kserve.models.v1beta1_ingress_config.V1beta1IngressConfig() # noqa: E501 if include_optional : return V1beta1IngressConfig( - ingress_gateway = '0', - ingress_service = '0' + ingress_gateway = '0' ) else : return V1beta1IngressConfig(