繁体   English   中英

kubernetes-如何使用 nginx 入口控制器对本地主机进行子域?

[英]kubernetes-how to subdomain localhost using nginx ingress controller?

我想在 kubernetes 上运行 2 个应用程序,我想知道是否可以使用 nginx 入口控制器做 2 个子域。

例如: app1.localhost:8181/cxfapp2.localhost:8181/cxf每一个都有不同的服务。

我怎样才能做到这一点?

这里有更多的上下文:

编辑:

注意:mysql 工作正常,所以我不会在这里发布 yaml,所以它不会太长。

还要注意,我使用带有 kar 的 karaf。(那将是我的应用程序)

我在想也许我应该有 2 个节点? 一个带有 mysql 和 app1,另一个带有 mysql 和 app2? 所以在一个我可以访问app1.localhost/cxf服务和另一个app2.localhost/cxf服务......也许没有多大意义......我读到我需要 kubeadm ,但没有在 windows 上安装它的方法。 我想我必须为此使用 minikube 吗?

这些是我的 yaml:

负载均衡器:

apiVersion: v1
kind: Service
metadata:
  name: lb-service
spec:
  type: LoadBalancer
  selector:
    app: app1
  ports:
  - protocol: TCP
    name: app1
    port: 3306
    targetPort: 3306
  - protocol: TCP
    name: app1-8080
    port: 8080
    targetPort: 8080
  - protocol: TCP
    name: app1-8101
    port: 8101
    targetPort: 8101
  - protocol: TCP
    name: app1-8181
    port: 8181
    targetPort: 8181
status:
  loadBalancer:
    ingress:
      - hostname: localhost

应用程序1:

apiVersion: v1
kind: Service
metadata:
  name: app1-service
spec:
  ports:
  - port: 8101
  selector:
    app: app1
  clusterIP: None
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: app1-deployment
spec:
  selector:
    matchLabels:
      app: app1
  replicas: 1
  template:
    metadata:
      labels:
        app: app1
    spec:
      containers:
      - name: app1
        image: app1:latest

app2:与 app1 相同,但版本不同(旧服务)

入口资源:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: apps-ingress
  #annotations:
    #nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - host: app1.localhost # tried app1.127-0-0-1.sslip.io ass answered below too.
    http:
      paths:
      - path: /
        backend:
          serviceName: app1-service
          servicePort: 8181
  - host: app2.localhost
    http:
      paths:
      - path: /
        backend:
          serviceName: app2-service
          servicePort: 8181

我应该能够访问APP1版本app1.localhost:8181/cxf ,和App2版本app2.localhost:8181/cxf

我还有另一个疑问,难道我不能创建另一个负载均衡器吗? 我想,所以选择器将是该 loadBalancer 中的 app2,但由于我已经有了一个,新的只是保持<pending>直到我删除第一个。

这是有道理的,因为如果我有 2 个副本,如果 app1 和 app2 的 2 个副本,那么每个应用程序都应该有一个负载均衡器,对吗?

请注意,我也使用 helm 安装了 nginx ingress-controller,因为否则 ingress-resource 将无法工作,至少这是我所读到的。

通过安装它,它也安装了 nginx 负载均衡器,而这个没有挂起。 我需要使用 nginx loadBalancer 吗? 或者我可以删除它并使用 kubernetes 类型的 loadBalancer 吗?

Huum,我在这里遗漏了一些东西......

谢谢你的时间!

我想在 kubernetes 上运行 2 个应用程序,我想知道是否可以使用 nginx 入口控制器做 2 个子域。

是的,您只需要指向 Ingress 控制器 IP 的任意数量的 DNS 记录(您使用了 127.0.0.1,所以这就是我将在这些示例中使用的内容,但您可以替换任何相关的 IP)。 这就是 Ingress 资源的全部意义:使用host:标头将请求分派到集群中

我找到了一个通配符 DNS 提供商列表,其中我确认app1.127-0-0-1.sslip.ioapp2.127-0-0-1.sslip.io按预期执行

因此:

kind: Ingress
metadata:
  name: app1-and-2
spec:
  rules:
  - host: app1.127-0-0-1.sslip.io
    http:
      paths:
      - path: /
        backend:
          serviceName: app1-backend
          servicePort: 8181  # <-- or whatever your Service port is

  # then you can repeat that for as many hosts as you wish
  - host: app2.127-0-0-1.sslip.io
    http:
      paths:
      - path: /
        backend:
          serviceName: app2-backend
          servicePort: 8181

暂无
暂无

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

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