Ingress和Ingress控制器如何将它们与NodePort Services一起使用?

时间:2018-09-15 14:53:35

标签: django kubernetes kubernetes-ingress google-kubernetes-engine nginx-ingress

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

deployment.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

service.yml

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

ingress.yml

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

我从此repo开始逐步进行。我无法在我的端口配置中使用它。 我是一个初学者,想要一些相同的资源。

2 个答案:

答案 0 :(得分:2)

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

我建议在尝试Ingress之前先确保它与NodePort兼容。我建议这样做是因为我注意到您的服务仅为port和targetPort指定值,而不为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/#simple-fanout

中的扇出入口示例

答案 1 :(得分:2)

尝试这些清单,并记住部署一个Ingress Controller(我通常使用traefik,here一些说明进行设置)

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