Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx Kubernetes群集应用程序DNS_Nginx_Kubernetes_Google Compute Engine - Fatal编程技术网

Nginx Kubernetes群集应用程序DNS

Nginx Kubernetes群集应用程序DNS,nginx,kubernetes,google-compute-engine,Nginx,Kubernetes,Google Compute Engine,如果我注册了一个域名www.domain.com,并且我有了新的kubernetes集群并正在运行。我已成功启动部署和服务,以公开需求 该服务正在我的GCE群集上创建一个LoadBalancer,当我尝试通过外部IP访问我的APP时,该服务将正常工作 但这正是我理想中想要实现的: 将我的应用程序的所有流量路由为www.app.domain.com,www.app2.domain.com。经过研究,我发现我需要一个ingres控制器最好是NGINX服务器,我一直在尝试这样做,但失败惨重 这是为我的

如果我注册了一个域名
www.domain.com
,并且我有了新的kubernetes集群并正在运行。我已成功启动
部署
服务
,以公开需求

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

但这正是我理想中想要实现的:

将我的应用程序的所有流量路由为
www.app.domain.com
www.app2.domain.com
。经过研究,我发现我需要一个
ingres控制器
最好是
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'
        },
    }
}

GCE/GKE已经有一个
入口控制器
,您可以使用该控制器

您必须将您的服务指定为类型
NodePort
,并从类型
ingres
见:

你可以在这里找到一个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

nginx的哪个部分没有工作?反向代理不是吗difficult@cricket_007我还没有弄明白ngnix润滑油部署yaml应该是什么样子。我假设“customdomain.com”是我的注册域…并且我的应用程序负载平衡在“app.customdomain.com”上。。。。我对整个网络和开发操作都很陌生……我不熟悉kubernetes,只是nginx配置。你确定对NodePort的要求吗?当使用入口控制器时,它应该在没有节点端口的情况下工作。此外,设置DNS可能需要更多的工作。DNS记录必须指向GCE/GKE集群公开的内容,即负载平衡器IP或CNAME。不知道谷歌是如何解决这个问题的…在GCE/GKE节点端口上是必需的,请看这里。Ingress使DNS的管理更容易。入口使用IP创建负载平衡器,您可以创建通配符DNS条目,例如.*.domain.com。之后,kubernetes将流量路由到正确的服务。它确实与服务中的NodePort一起工作,并使用子域路由更新DNS通配符。我还有一个问题,如果我想在创建其他入口时使用相同的负载平衡器IP,该怎么办?这是不可能的,问题是为什么要这样做。负载均衡器等于一个入口。您可以将所有服务添加到一个入口。如果您希望使用静态ip,并希望在删除第一个入口后将同一ip分配给另一个入口/LB,则可以将静态ip分配给LB。如下所示: