3

我有一个在 NodePort 服务上运行的服务。我如何使用入口访问多个服务。

部署.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth
spec:
  replicas: 1
  selector:
    matchLabels:
      app: auth
  template:
    metadata:
      labels:
        app: auth
        tier: backend
        track: dev
    spec:
      containers:
        - name: auth
          image: [url]/auth_app:v2
          ports:
            - name: auth
              containerPort: 3000

服务.yml

apiVersion: v1
kind: Service
metadata:
  name: auth
spec:
  selector:
    app: auth
    tier: backend
  ports:
    - protocol: TCP
      port: 3000
      targetPort: auth
  type: NodePort

入口.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  backend:
    serviceName: auth
    servicePort: 8080

我从这个repo一步一步地跟随。我无法让它适用于我的端口配置。我是初学者,想要一些相同的资源。

4

2 回答 2

3

您的服务在端口 3000 中运行,但您的 Ingress 路由规则与端口 8080 匹配。如果您在 Ingress 资源定义的后端部分将 servicePort 更改为 3000,它可能会起作用。

我建议在尝试 Ingress 之前先确保它与 NodePort 一起工作。我建议这样做是因为我注意到您的服务仅指定了端口和目标端口的值,但没有指定节点端口的值。如果您不指定 nodeport 值,您将获得一个随机端口号。由于您想将 ingress 与 NodePort 服务类型一起使用,因此随机端口号应该无关紧要。

对于 NodePort 教程,您可以从https://medium.com/@markgituma/kubernetes-local-to-production-with-django-2-docker-and-minikube-ba843d858817开始,因为我注意到您已经用 django 标记了您的帖子

对于 nginx 入口,您可以看到https://cloud.google.com/community/tutorials/nginx-ingress-gke但如果您不使用 gke,您可能希望找到特定于您的云平台的内容

最好从一项服务开始,但要了解这如何适用于多项服务,您可以查看文档https://kubernetes.io/docs/concepts/services-networking/ingress/#中的扇出入口示例简单扇出

于 2018-09-15T16:09:33.007 回答
3

试试这些清单,记得部署一个 Ingress Controller(我通常使用 traefik,这里有一些设置说明)

service.yml:我把NodePort改成ClusterIP(默认的,可以去掉这行)

apiVersion: v1
kind: Service
metadata:
  name: auth
spec:
  selector:
    app: auth
    tier: backend
  ports:
    - protocol: TCP
      port: 3000
      targetPort: auth
  type: ClusterIP

ingress.yml:(我将端口设置为3000,您的服务端口)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  backend:
    serviceName: auth
    servicePort: 3000
于 2018-09-15T17:21:37.100 回答