简体   繁体   中英

How can i expose my EKS microservices via nginx ingress controller

I am trying to use microservices with my frontend application through nginx ingress controller.

kubectl apply -f https://raw.githubusercontent.com/kube.netes/ingress-nginx/controller-v0.48.1/deploy/static/provider/aws/deploy.yaml above is the command which we have followed to deploy nginx-controller.

reference - https://kube.netes.github.io/ingress-nginx/deploy/#aws

------ My deployment.yaml & service.yaml for integrations-api is as below -------

'''

apiVersion: apps/v1
kind: Deployment
metadata:
  name: integrations-api
  labels:
    app: integrations-api
spec:
  replicas: 1
  selector:
    matchLabels:
      app: integrations-api
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: integrations-api
    spec:
      containers:
      - image: "###imagepath####"
        imagePullPolicy: Always
        name: integrations-api
        ports:
        - containerPort: 8083
          protocol: TCP

---

apiVersion: v1
kind: Service
metadata:
  name: integrations-api
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "tcp,http"
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert:  "###certpath###"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
spec:
  type: LoadBalancer
  selector:
    app: integrations-api
  ports:
  - name: http
    port: 80
    targetPort: 8083
    protocol: TCP
  - name: https
    port: 443
    targetPort: 8083
    protocol: TCP

'''

------ My ingress.yaml looks like this --------

'''

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:  
  rules:  
  - http:
      paths:
          - path: /
            backend:
              serviceName: integrations-api
              servicePort: 80
          - path: /
            backend:
              serviceName: user-api
              servicePort: 80

'''

IN my node.js integraion-api code we have added testing api path as below '''

app.get('/camps', (req, res) => {
  let obj = {}
  res.send(obj);
});

'''

When i am vising endpoint of nginx-controller(here it is load balancer endpoint) https://####NLB-endpoint###/camps i am getting response.

same configuration like deployment.yaml, service.yaml & nodejs code is written for user-services api. but i am not getting response for user-api https://####NLB-endpoint###/users

Note, When i am shuffeling the ingress file as below i am getting response of https://####NLB-endpoint###/users but not for https://####NLB-endpoint###/camps. looks inress is taking path which is mentioned in first place only.

'''

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
          - path: /
            backend:
              serviceName: user-api
              servicePort: 80
          - path: /
            backend:
              serviceName: integrations-api
              servicePort: 80
   

'''

Any clue how can i fix this? Thanks in advance. it would great help from your side if someone guide us on the same.

This response may be too late. You are trying to creating a path based routing with multiple microservices. In this case, you need to set a path. For user-api, you need to set /user as path and then for integrations-api, you need to specify another path like /camps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM