Abdnacer Fried
Abdnacer Fried

Reputation: 33

Expose services via Istio ingress gateway

I am new to istio and I want to expose three services and route traffic to those services based on the port number passed to "website.com:port" or subdomain.

services deployment config files:

    apiVersion: v1
kind: Service
metadata:
  name: visitor-service 
  labels:
    app: visitor-service
spec:
  ports:
    - port: 8000
      nodePort: 30800
      targetPort: 8000
  selector:
   app: visitor-service
---   
apiVersion: apps/v1
kind: Deployment
metadata:
  name: visitor-service 
spec:
  replicas: 1
  selector:
    matchLabels:
      app: visitor-service
  template:
    metadata:
      labels:
        app: visitor-service
    spec:
      containers:
        - name: visitor-service
          image: visitor-service
          ports:
            - containerPort: 8000

second service:

apiVersion: v1
kind: Service
metadata:
  name: auth-service 
  labels:
    app: auth-service
spec:
  ports:
    - port: 3004
      nodePort: 30304
      targetPort: 3004
  selector:
   app: auth-service
---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: auth-service
  template:
    metadata:
      labels:
        app: auth-service
    spec:
      containers:
        - name: auth-service
          image: auth-service
          ports:
            - containerPort: 3004

Third one:

apiVersion: v1
kind: Service
metadata:
  name: gateway 
  labels:
    app: gateway
spec:
  ports:
    - port: 8080
      nodePort: 30808
      targetPort: 8080
  selector:
   app: gateway

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gateway
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gateway
  template:
    metadata:
      labels:
        app: gateway
    spec:
      containers:
        - name: gateway
          image: gateway
          ports:
            - containerPort: 8080

If someone can help setting up the gateway and virtual service configuration it would be great.

Upvotes: 0

Views: 1090

Answers (1)

F1ko
F1ko

Reputation: 4294

It seems like you simply want to expose your applications, for that reason istio seems like a total overkill since it comes with a lot of overhead that you won't be using. Regardless of whether you want to use istio as your default ingress or any other ingress-controller (nginx, traefik, ...) the following construct applies to all of them: Expose the ingress-controller via a service of type NodePort or LoadBalancer, depending on your infrastructure. In a cloud environment the latter one will most likely work the best for you (if on GKE, AKS, EKS, ...). Once it is exposed set up a DNS A record to point to the external IP address. Afterwards you can start configuring your ingress, depending on which ingress-controller you chose the following YAML may need some adjustments (example is given for istio):

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: istio
  name: ingress
spec:
  rules:
  - host: httpbin.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          serviceName: httpbin
          servicePort: 8000

If a request for something like httpbin.example.com comes in to your ingress-controller it is going to send the request to a service named httpbin on port 8000. As can be seen in the YAML posted above, the rules and paths field take a list (indicated by the - in the next line). To expose multiple services simply add a new entry to the list, e.g.:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: istio
  name: ingress
spec:
  rules:
  - host: httpbin.example.com
    http:
      paths:
      - path: /httpbin
        pathType: Prefix
        backend:
          serviceName: httpbin
          servicePort: 8000
      - path: /apache
        pathType: Prefix
        backend:
          serviceName: apache
          servicePort: 8080

This is going to send requests like httpbin.example.com/httpbin/ to httpbin and httpbin.example.com/apache/ to apache.

For further information see:

Upvotes: 2

Related Questions