简体   繁体   English

创建指向两个服务的 Kubernetes 入口

[英]Creating a Kubernetes ingress pointing two services

Requirement: Want to deploy Minio and another backend service using an ingress with HTTPS (Not for production purposes)要求:想要使用 HTTPS 的入口部署 Minio 和另一个后端服务(不用于生产目的)

I have been trying to create an ingress to access two services externally from the Kubernetes cluster in GKE.我一直在尝试创建一个入口,以从 GKE 中的 Kubernetes 集群外部访问两个服务。 These are the attempts I tried.这些是我尝试过的尝试。

Attempt One尝试一

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: lightning-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
        - path: /storage
          backend:
            serviceName: minio
            servicePort: 9000
        - path: /portal
          backend:
            serviceName: oscar
            servicePort: 8080

Attempt Two尝试二

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: oscar
  annotations:
    # nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: oscar
          servicePort: 8080
  - host: storage.lightningfaas.tech
    http:
      paths:
      - backend:
          serviceName: minio
          servicePort: 9000

Attempt Three尝试三

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: lightning-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: minio
          servicePort: 9000
        path: /minio(/|$)(.*)
      - backend:
          serviceName: oscar
          servicePort: 8080
        path: /portal(/|$)(.*)

Attempt Four尝试四

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: minio-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: minio.lightningfaas.tech
    http:
      paths:
      - backend:
          serviceName: minio
          servicePort: 9000
  - host: portal.lightningfaas.tech
    http:
      paths:
      - backend:
          serviceName: oscar
          servicePort: 8080

However, none of the above attempts suites for my requirement.但是,上述尝试都不适合我的要求。 Either it gives a 404 0r a 503. But I can confirm that creating an individual ingress for each service works fine as below.要么给出 404 0r 503。但我可以确认为每个服务创建单独的入口可以正常工作,如下所示。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: oscar
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: oscar
          servicePort: 8080
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: minio-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: minio
          servicePort: 9000

Changing domain servers takes a huge time to test as well, therefore creating hosts are very annoying since I have to wait a massive time to test my code.更改域服务器也需要花费大量时间来测试,因此创建主机非常烦人,因为我必须等待大量时间来测试我的代码。 Is there anything more that I can try?还有什么我可以尝试的吗?

Something like below would be ideal:像下面这样的东西是理想的:

https://34.452.234.45:9000 > will access minio https://34.452.234.45:9000 > 将访问 minio

https://34.452.234.45:8080 > will access oscar https://34.452.234.45:8080 > 将访问奥斯卡

Your suggestions and opinions will be really helpful for me.你的建议和意见对我真的很有帮助。

Minio helm chart: https://github.com/minio/charts Minio舵图: https://github.com/minio/charts

Minio deployment Minio 部署

helm install --namespace oscar minio minio/minio --set accessKey=minio --set secretKey=password --set persistence.existingClaim=lightnig --set resources.requests.memory=256Mi 

Oscar helm chart: https://github.com/grycap/helm-charts/tree/master/oscar奥斯卡掌舵图: https://github.com/grycap/helm-charts/tree/master/oscar

Oscar deployment奥斯卡部署

helm install --namespace=oscar oscar oscar --set authPass=password --set service.type=ClusterIP --set createIngress=false --set volume.storageClassName=nfs --set minIO.endpoint=http://104.197.173.174 --set minIO.TLSVerify=false --set minIO.accessKey=minio --set minIO.secretKey=password --set serverlessBackend=openfaas

According to kubernetes doc, simple fan-out example should solve your problem.根据 kubernetes 文档,简单的扇出示例应该可以解决您的问题。 A simple fan-out example is given below where same host has two different paths for two different services.下面给出了一个简单的扇出示例,其中同一主机有两个不同的路径用于两个不同的服务。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: simple-fanout-example
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foo
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 4200
      - path: /bar
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 8080

So your manifest file might look like this:因此,您的清单文件可能如下所示:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
    name: lightning-ingress
    namespace: default
spec:
  rules:
  - host: [your host name here]
    http:
      paths:
      - path: /storage
        pathType: Prefix
        backend:
          service:
            name: minio
            port:
              number: 9000
      - path: /portal
        pathType: Prefix
        backend:
          service:
            name: oscar
            port:
              number: 8080

Ref: Kubernetes doc参考: Kubernetes 文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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