Gcloud kubernetes集群访问互联网

时间:2019-05-30 12:04:34

标签: kubernetes gcloud kubernetes-ingress

无法从Internet访问gcloud kubernetes集群中的Pod。从kubernetes或Cloud Shell访问可以正常工作。

有一种服务器方式可以从外部kubernetes集群访问Pod。我尝试了三种不同的方式。

我的kubernetes集群不是私有的,这意味着命令

kubectl get nodes - o wide 

具有一个外部IP地址。从gc项目外部可以访问ip。

我用Pod yaml创建了一个pod,而不是使用deploymentConfig。 Pod有两个容器端口:

ports:
  - containerPort: 8500
  - containerPort: 8501

Pod正在运行容器内部的端口已打开。现在,我以不同的方式创建了服务。

创建不同的服务。服务和Pod通过选择器

连接
app=myapp

1 NodePort:使用kubernetes群集中的外部IP地址。我从NodePort类型创建了一个服务。访问应通过clusterIP进行:

2 LoadBalancer:使用Loadbalanacer类型创建服务会为该服务创建一个外部IP地址。

kubectl get service -o wide

kubectl expose pod myapp --port 8500 --target-port=8500 --type=Loadbalancer

我有第二个外部IP地址。从外部通过“ ip-address:port”进行的访问不起作用

3 HostPort:容器端口将通过以下位置暴露给外部网络,其中hostIP是容器运行所在的Kubernetes节点的IP地址,而hostPort是用户请求的端口。

使用本教程:http://alesnosek.com/blog/2017/02/14/accessing-kubernetes-pods-from-outside-of-the-cluster/

对我唯一有效的方法是使用端口80。我将端口80用于剩余端点,但是我有2个端点rest和grpc,都应提供这两个端点。

总体而言,我为使用的端口创建了防火墙规则:

gcloud compute firewall-rules create MY-RULE \
  --allow tcp:8500-8501

对我没有任何帮助。现在我相信我缺少了一些东西。 先感谢您。

最良好的祝愿 琼恩

1 个答案:

答案 0 :(得分:0)

让我们专注于您尝试的第二个选项(通过LoadBalancer公开应用程序):

我假设您正在使用GKE(Google Kubernetes引擎)

首先,我可以在“ expose”命令中看到您输入错误(服务类型区分大小写):

更改:

--type=Loadbalancer

收件人:

--type=LoadBalancer

您没有做错任何事情,因此公开HTTP服务应该可以工作,请使用以下命令快速验证您的Kubernetes集群是否功能齐全:

kubectl create ns demo
kubectl -n demo run myapp --generator=run-pod/v1 --image=nginx
kubectl -n demo expose pod myapp --port 8500 --target-port=80 --type=LoadBalancer

并尝试在<EXTERNAL-IP>:<8500>上访问应用

对于grpc-service,事情变得越来越困难,请按照this教程了解如何在GKE上执行此操作。