繁体   English   中英

如何将K8 Pod暴露给公共互联网?

[英]How to expose k8 pods to the public internet?

我目前正在学习docker和kubernetes。 我遇到的问题之一就是将Nginx Pod暴露在公共互联网上。 我想从Web浏览器访问我的serverIP并看到nginx页面,就像在服务器上安装了nginx一样。

来自kubernetes网站的pod-nginx.yml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80

我可以从pod向前移植,然后通过curl访问默认的nginx页面。 sudo kubectl port-forward nginx 80:80

curl http://localhost返回nginx页面,而curl http://<serverIP>返回failed to connect <serverIP> port:80 Connection refused

我是否需要通过修改iptables和防火墙规则在公共网络接口与群集网络接口之间进行端口转发? 我觉得我在这里确实缺少一些明显的东西。

我尝试使用nodeport属性并阅读了有关入口和负载平衡器的文档,但是我的云提供程序没有这些后端功能,因此这些命令最终会无限期地挂起。

有多种公开服务的方式:

  • 使用NodePort :这将在主机中打开一个端口,您可以在其中访问服务。 例如,像192.168.100.99:37843这样的东西,是192.168.100.99所在的群集所在的HOST系统之一。

  • 使用LoadBalancer :如果您的集群位于Google之类的云中,则可以使用基础架构为服务生成外部IP。 我坚持以下事实:底层云必须支持它。

  • 使用Ingress规则 :LoadBalancers的适当替代方法是使用反向代理。 Kubernetes允许您在端口80和443中侦听此反向代理,并使用Ingress规则将流量转发到您的不同服务。

考虑到您的情况,我认为“入口规则”选项将满足您的需求。 如果您的集群未安装Ingress控制器,则可以基于nginx安装控制器。

要公开Pod或部署,您必须执行以下操作。

  1. 使用nodeport标志可以在所有节点上为应用程序分配相同的端口。 Kubernetes将创建一个ServiceIP,在其中将公开您的应用程序。

kubectl expose <deployment> --nodeport=<common-port> --port=<container-port>

创建暴露服务后,您可以使用kubectl get services获得ServiceIP

  1. 使用nginx或其他负载平衡器将代理反向到您的节点中。 我通过在/etc/nginx/sites-enabled创建默认文件来将nginx配置为proxy_pass到我的应用程序

    服务器{收听80;

    位置/ {proxy_pass http:// ServiceIP:ApplicationPort ; }}

此方法允许唯一的路由,甚至轮循负载平衡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM