Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: As a user, I want to configure External services using Kubernetes Ingress without CRD's #2170

Open
felpasl opened this issue Feb 22, 2024 · 2 comments

Comments

@felpasl
Copy link

felpasl commented Feb 22, 2024

Description

Be able to do this:

kind: Service
apiVersion: v1
metadata:
  name: external-service
spec:
  type: ExternalName
  externalName: httpbin.org
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: external-ingress
spec:
  ingressClassName: apisix
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: external-service
                port:
                  number: 80

for now we got errors on APISix igress controller about

ingress-controller 2024-02-23T01:27:24+08:00    error    translation/translator.go:173    failed to translate ingress backend to upstream    {"error": "endpoints: endpoints \"external-service\" not found", "ingress": "&Ingress{ObjectMeta:{external-ingress  default  8d82feba-b762-4a2a-81f8-0df3d355e497 8453 1 2024-02-23 01:27:19 +0800 HKT <nil> <nil> map] map[kubectl.kubernetes.io/last-applied-configuration:{\"apiVersion\":\"networking.k8s.io/v1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{},\"name\":\"external-ingress\",\"namespace\":\"default\"},\"spec\":{\"ingressClassName\":\"apisix\",\"rules\":[{\"http\":{\"paths\":[{\"backend\":{\"service\":{\"name\":\"external-service\",\"port\":{\"number\":80}}},\"path\":\"/\",\"pathType\":\"Prefix\"}]}}]}}\n] ] ] [{kubectl-client-side-apply Update networking.k8s.io/v1 2024-02-23 01:27:19 +0800 HKT FieldsV1 {\"f:metadata\":{\"f:annotations\":{\".\":{},\"f:kubectl.kubernetes.io/last-applied-configuration\":{}}},\"f:spec\":{\"f:ingressClassName\":{},\"f:rules\":{}}} }]},Spec:IngressSpec{DefaultBackend:nil,TLS:]IngressTLS{},Rules:]IngressRule{IngressRule{Host:,IngressRuleValue:IngressRuleValue{HTTP:&HTTPIngressRuleValue{Paths:]HTTPIngressPath{HTTPIngressPath{Path:/,Backend:IngressBackend{Resource:nil,Service:&IngressServiceBackend{Name:external-service,Port:ServiceBackendPort{Name:,Number:80,},},},PathType:*Prefix,},},},},},},IngressClassName:*apisix,},Status:IngressStatus{LoadBalancer:IngressLoadBalancerStatus{Ingress:]IngressLoadBalancerIngress{},},},}"}
ingress-controller 2024-02-23T01:27:24+08:00    error    ingress/ingress.go:178    failed to translate ingress    {"error": "endpoints: endpoints \"external-service\" not found", "ingress": {"Object":{"metadata":{"name":"external-ingress","namespace":"default","uid":"8d82feba-b762-4a2a-81f8-0df3d355e497","resourceVersion":"8453","generation":1,"creationTimestamp":"2024-02-22T17:27:19Z","annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"networking.k8s.io/v1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{},\"name\":\"external-ingress\",\"namespace\":\"default\"},\"spec\":{\"ingressClassName\":\"apisix\",\"rules\":[{\"http\":{\"paths\":[{\"backend\":{\"service\":{\"name\":\"external-service\",\"port\":{\"number\":80}}},\"path\":\"/\",\"pathType\":\"Prefix\"}]}}]}}\n"},"managedFields":[{"manager":"kubectl-client-side-apply","operation":"Update","apiVersion":"networking.k8s.io/v1","time":"2024-02-22T17:27:19Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:kubectl.kubernetes.io/last-applied-configuration":{}}},"f:spec":{"f:ingressClassName":{},"f:rules":{}}}}]},"spec":{"ingressClassName":"apisix","rules":[{"http":{"paths":[{"path":"/","pathType":"Prefix","backend":{"service":{"name":"external-service","port":{"number":80}}}}]}}]},"status":{"loadBalancer":{}}}}}
ingress-controller 2024-02-23T01:27:24+08:00    warn    ingress/ingress.go:255    sync ingress failed, will retry    {"object": {"Type":1,"Object":{"Key":"default/external-ingress","GroupVersion":"networking/v1","OldObject":null},"OldObject":null,"Tombstone":null}, "error": "endpoints: endpoints \"external-service\" not found"}
ingress-controller 2024-02-23T01:27:24+08:00    error    ingress/ingress.go:502    failed to get APISIX gateway external IPs    {"error": "service \"\" not found"}
Stream closed EOF for ingress-apisix/apisix-ingress-controller-59f456c5c5-rlcfn (wait-apisix-admin)
@bigfish02
Copy link
Contributor

Yes, apisix-ingress-controller does not support ingress with external service。But you can use apisixroute and apisixupstream to implement this. Example as follows:

apiVersion: apisix.apache.org/v2
kind: ApisixUpstream
metadata:
  name: external-service
spec:
  externalNodes:
  - type: Domain
    name: httpbin.org
---
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
  name: external-ingress
spec:
  http:
  - name: rule1
    match:
      hosts:
      - local.httpbin.org
      paths:
      - /*
    upstreams:
    - name: external-service

@felpasl
Copy link
Author

felpasl commented Mar 6, 2024

We are not allowed to use CRDs due to company policy for inbound traffic; only Ingress is available

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants