微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决创建指向两个服务的 Kubernetes 入口

要求:想要使用带 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 文档,简单的扇出示例应该可以解决您的问题。 下面给出了一个简单的扇出示例,其中同一主机具有用于两个不同服务的两条不同路径。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?