如何使用特定端口定义一些Kubernetes入口路由

时间:2019-06-10 02:13:45

标签: kubernetes kubernetes-ingress

我正在尝试为我的Kubernetes集群创建一些入口规则(当前在使用Docker Desktop的localhost上),并且它们无法正常工作。

我要做什么

- App #1 : Some database (e.g. mongodb or RavenDb or Postgres, etc).
- App #2 : Some queue (rabbitmq, etc)
- App #3 : Some web site api #1 
- App #4 : Some web site api #2

访问每个应用的路线

- App #1 : <anything>:port 5200
- App #2 : <anything>:port 5300
- App #3 : /account/*:80, /accounts:80
- App #4 : /order/*:80, /orders/*:80

[注意->我尚未包括ssl / 443端口,因为我尚未处理过,等等]

所以这是我第一个应用程序(不起作用)的示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: data-ravendb-ingress
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: data-ravendb-service
          servicePort: dashboard

---
apiVersion: v1
kind: Service
metadata:
  name: data-ravendb-service
  labels:
    app: hornet
    tier: backend
    component: data-ravendb
spec:
  ports:
  - name: dashboard
    port: 5200
    targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: data-ravendb-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hornet
        tier: backend
        component: data-ravendb
    spec:
      containers:
      - name: data-ravendb-container
        image: ravendb/ravendb
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          name: dashboard

如何设置我的入口以允许这4个应用适当访问后端服务?

2 个答案:

答案 0 :(得分:2)

当前不完全支持在Kubernetes Ingress中路由除HTTP / HTTPS协议以外的任何其他流量。另外,您使用的Traefik是HTTP反向代理,因此使用该入口控制器很难或不可能做到这一点。

请参见Kubernetes: Routing non HTTP Request via Ingress to Container

答案 1 :(得分:1)

正如@Jakub所述,入口仅支持http / https端口。

您可以为网站api以及App1和App2创建具有不同后端路径的入口。但是,如果您需要使用端口公开,则可以考虑使用LoadBalancer服务。

根据您第一个应用程序的示例,为什么它不起作用,因为您没有在服务Yaml中指定as_json。尝试按如下所示进行更改,然后它将起作用。

selectors

希望有帮助!