【问题标题】:Kubernetes Cluster APP DNSKubernetes集群APP DNS
【发布时间】:2017-03-04 03:15:46
【问题描述】:

如果我注册了一个域名www.domain.com,并且我有新的 kubernetes 集群启动并运行。我已经成功发布了DeploymentsServices 来公开需求。

该服务正在我的 GCE 集群上创建一个 LoadBalancer,当我尝试通过外部 IP 访问我的 APP 时它正在工作。

但这是我想要达到的理想目标:

将我的应用程序的所有流量路由为www.app.domain.comwww.app2.domain.com。经过研究,我发现我需要一个 Ingress Controller 最好是 NGINX 服务器,我一直在尝试这样做并且失败了。

这是为我的部署公开 JSON 的服务:

{
    "kind": "Service",
    "apiVersion": "v1",
    "metadata": {
        "name": 'node-js-srv'
    },

    "spec": {
        "type": 'LoadBalancer',
        "label": {
            'app': 'node-js-srv'
        },

        "ports": [
        {
            "targetPort": 8080,
            "protocol": "TCP",
            "port": 80,
            "name": "http"
        },
        {
            "protocol": "TCP",
            "port": 443,
            "name": "https",
            "targetPort": 8080
        }
        ],
        "selector": {
            "app": 'node-js'
        },
    }
}

【问题讨论】:

  • nginx的哪个部分没有工作?反向代理并不难
  • @cricket_007 我无法弄清楚 ngnix 润滑油部署 yaml 应该是什么样子。我假设 'customdomain.com' 作为我的注册域 .... 并在 'app.customdomain.com' 上平衡我的应用程序负载 .... 我对整个网络和开发操作真的很陌生 ....跨度>
  • 我对kubernetes不熟悉,只是nginx config

标签: nginx kubernetes google-compute-engine


【解决方案1】:

GCE/GKE 已经有一个Ingress Controller,你可以使用那个。

您必须将您的服务指定为 NodePort 类型并从 Ingress 类型创建资源 看: https://kubernetes.io/docs/user-guide/ingress/

您可以在这里找到 GCE 的示例https://github.com/kubernetes/ingress/tree/master/examples/deployment/gce

服务:

{
    "kind": "Service",
    "apiVersion": "v1",
    "metadata": {
        "name": 'node-js-srv'
    },

    "spec": {
        "type": 'NodePort',
        "label": {
            'app': 'node-js-srv'
        },

        "ports": [
        {
            "targetPort": 8080,
            "protocol": "TCP",
            "port": 80,
            "name": "http"
        },
        {
            "protocol": "TCP",
            "port": 443,
            "name": "https",
            "targetPort": 8080
        }
        ],
        "selector": {
            "app": 'node-js'
        },
    }
}

入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
spec:
  rules:
  - host: www.app.domain.com
    http:
      paths:
      - backend:
          serviceName: node-js-srv
          servicePort: 80
  - host: www.app2.domain.com
    http:
      paths:
      - backend:
          serviceName: xyz
          servicePort: 80

【讨论】:

  • 您确定对 NodePort 的要求吗?使用入口控制器时,它应该在没有 NodePort 的情况下工作。此外,设置 DNS 可能需要更多的工作。 DNS 记录必须指向 GCE/GKE 集群公开的内容,负载均衡器 IP 或 CNAME。不知道谷歌是如何解决这个问题的......
  • 在 GCE/GKE 上需要 NodePort,请参阅此处github.com/kubernetes/kubernetes/issues/26508
  • Ingress 使管理 DNS 变得更加容易。入口创建一个带有 IP 的负载均衡器,您可以创建一个通配符 DNS 条目,例如*.domain.com。之后 kubernetes 将流量路由到正确的服务
  • 它确实与服务中的 NodePort 一起工作,并使用子域路由更新 DNS 通配符。只是我还有一个问题,如果我想在创建其他入口时使用相同的负载均衡器 IP 怎么办?
  • 这是不可能的,问题是你为什么要这样做。在负载均衡器上等于一个入口。您可以将所有服务添加到一个入口。如果您想使用静态 IP 并希望在删除第一个入口后将相同的 IP 分配给另一个入口/LB,您可以为 LB 分配一个静态 IP。像这样:github.com/kubernetes/ingress/tree/master/examples/static-ip/…
猜你喜欢
  • 2016-11-30
  • 1970-01-01
  • 2020-04-07
  • 2020-10-15
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
相关资源
最近更新 更多