【问题标题】:Creating a Kubernetes ingress pointing two services创建指向两个服务的 Kubernetes 入口
【发布时间】:2021-05-30 07:00:29
【问题描述】:

要求:想要使用带有 HTTPS 的入口部署 Minio 和另一个后端服务(不用于生产目的)

我一直在尝试创建一个入口,以从 GKE 中的 Kubernetes 集群外部访问两个服务。这些是我尝试过的尝试。

尝试一个

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

尝试二

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

尝试三

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(/|$)(.*)

尝试四

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

但是,以上尝试都不适合我的要求。要么给出 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

更改域服务器也需要大量时间来测试,因此创建主机非常烦人,因为我必须等待大量时间来测试我的代码。还有什么我可以尝试的吗?

理想的情况如下:

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

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

您的建议和意见对我很有帮助。

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

Minio 部署

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

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

奥斯卡颁奖典礼

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

【问题讨论】:

    标签: kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress gke-networking


    【解决方案1】:

    根据 kubernetes 文档,简单的扇出示例应该可以解决您的问题。 下面给出了一个简单的扇出示例,其中同一主机有两个不同的路径用于两个不同的服务。

    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
    

    因此您的清单文件可能如下所示:

    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
    

    参考:Kubernetes doc

    【讨论】:

    • 感谢您的回复@Pulak。但由于某种原因,它发生了另一个错误'在版本“networking.k8s.io/v1”中没有匹配类型“Ingress”'。这似乎甚至没有部署。类似问题:stackoverflow.com/questions/66236346/….
    • 你使用的是k8s版本
    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2020-05-22
    • 2020-11-04
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多