使用Kubernetes在gcloud中公开简单应用程序

使用Kubernetes在gcloud中公开简单应用程序,kubernetes,google-cloud-platform,google-kubernetes-engine,gcloud,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,Gcloud,我有一个简单的应用程序,下面是一个基础教程: 我创建一个集群hello-world2-cluster 我使用以下方式“连接”到群集: gcloud容器集群获得凭证hello-world2-cluster--zone us-central1-c--project strange-vortex-286312 我执行了“hellow world”项目的git克隆,这基本上是一种蛇游戏: $git克隆 $cd hello-world-k8s/ 接下来,我在YAML上运行“创建”: kubectl

我有一个简单的应用程序,下面是一个基础教程:

  • 我创建一个集群hello-world2-cluster
  • 我使用以下方式“连接”到群集:

    gcloud容器集群获得凭证hello-world2-cluster--zone us-central1-c--project strange-vortex-286312

  • 我执行了“hellow world”项目的git克隆,这基本上是一种蛇游戏:

    $git克隆

    $cd hello-world-k8s/

  • 接下来,我在YAML上运行“创建”:

    kubectl create -f hello-world.yaml
    
    按预期创建解聚物和服务:

    很好!一切都好

    但是。。。。现在怎么办

    我现在该怎么办

    我想从外部世界访问此应用程序。我可以访问应用程序的URL在哪里

    我如何让我在廷巴克图的朋友鲍勃调用某种URL(不需要DNS)来访问我的应用程序


    我知道答案与LoadBalancer节点和入口有关,但似乎没有关于如何为一个简单的hello world应用程序实现这一点的适当文档。

    GKE hello world with
    Ingress
    官方示例

    ingress控制器内置于GKE中,您只需要一个指向您的
    服务的
    类:ingress
    对象。回答你的问题:

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: hello-ingress
      annotations:
        kubernetes.io/ingress.class: "gce"
    spec:
      rules:
      - http:
          paths:
          - path: /*
            backend:
              serviceName: hello-world
              servicePort: 80
    

    部署后,查询
    kubectl get ingres hello ingres-oyaml
    ,在
    状态:
    字段中找到生成的负载平衡器的IP。

    GKE hello world with
    ingres
    官方示例

    ingress控制器内置于GKE中,您只需要一个指向您的
    服务的
    类:ingress
    对象。回答你的问题:

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: hello-ingress
      annotations:
        kubernetes.io/ingress.class: "gce"
    spec:
      rules:
      - http:
          paths:
          - path: /*
            backend:
              serviceName: hello-world
              servicePort: 80
    

    部署后,查询
    kubectl get ingres hello ingres-oyaml
    ,在
    状态:
    字段中找到生成的负载平衡器的IP。

    如果您不想设置DNS和/或入口,只需使用节点外部IP即可

    您似乎已经部署了,
    NodePort
    服务映射到端口
    30081

    因此,以下是使其与您所拥有的一起工作的其余步骤:

  • 获取您的节点IP:
  • 现在您有了节点外部IP,您需要允许tcp通信到此端口
  • 就这样!你可以告诉你的朋友Bob,应该可以在节点ip:30081上访问该服务
  • 您可以根据您的服务类型查看其他可能性


    此外,当您使用
    NodePort
    时,端口映射到集群的所有节点,因此您可以使用任何IP。无需查找部署副本的节点。

    如果您不想设置DNS和/或入口,只需使用节点外部ip即可

    您似乎已经部署了,
    NodePort
    服务映射到端口
    30081

    因此,以下是使其与您所拥有的一起工作的其余步骤:

  • 获取您的节点IP:
  • 现在您有了节点外部IP,您需要允许tcp通信到此端口
  • 就这样!你可以告诉你的朋友Bob,应该可以在节点ip:30081上访问该服务
  • 您可以根据您的服务类型查看其他可能性


    此外,当您使用
    NodePort
    时,端口映射到集群的所有节点,因此您可以使用任何IP。无需查找部署副本的节点。

    如果您不想使用入口或任何东西。您可以将部署公开为LoadBalancer,然后您的朋友bob可以使用外部IP访问应用程序。所以使用

    kubectl expose deployment hello-world-deployment --name=hello-world-deployment --type=LoadBalancer --port 80 --target-port 80
    
    为服务分配外部IP地址大约需要1分钟

    获取外部IP使用

    kubectl get services
    
    获取服务前面的
    外部IP地址
    ,打开浏览器,输入复制的
    IP地址


    完成!!这是最简单的入门方法

    如果您不想使用入口或任何东西。您可以将部署公开为LoadBalancer,然后您的朋友bob可以使用外部IP访问应用程序。所以使用

    kubectl expose deployment hello-world-deployment --name=hello-world-deployment --type=LoadBalancer --port 80 --target-port 80
    
    为服务分配外部IP地址大约需要1分钟

    获取外部IP使用

    kubectl get services
    
    获取服务前面的
    外部IP地址
    ,打开浏览器,输入复制的
    IP地址


    完成!!这是最简单的入门方法

    您可以使用
    入口
    将Kubernetes服务公开到internet

    GKE允许您使用不同类型的
    入口
    nginx
    ,等等),但默认情况下,它将通过服务公开您的服务

    如@MaxLobur所示,您可以应用类似于以下内容的配置文件配置此默认入口:

    apiVersion:networking.k8s.io/v1beta1 种类:入口 元数据: 姓名:你好,世界安格尔 规格: 后端: 服务名称:你好,世界 服务端口:80
    或者,如果您想为各种后端服务准备
    入口
    ,并根据规则对其进行配置:

    apiVersion:networking.k8s.io/v1beta1 种类:入口 元数据: 姓名:你好,世界安格尔 规格: 规则: -http: 路径: -路径:/* 后端: 服务名称:你好,世界 服务端口:80
    入口
    将被分配一个外部IP地址

    您可以使用以下命令找到:

    kubectl获取入口hello world ingress
    
    此命令将输出类似于以下内容的内容:

    NAME                  HOSTS     ADDRESS         PORTS     AGE
    hello-world-ingress   *         203.0.113.12    80        2m
    
    但是,我