使用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
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 withingres
官方示例:
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
但是,我