无法从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
对我没有任何帮助。现在我相信我缺少了一些东西。 先感谢您。
最良好的祝愿 琼恩
答案 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上执行此操作。