要开始使用Kubernetes,我创建了一个小项目,在其中使用Vagrant和Vbox在本地计算机上创建了三个节点的集群: https://github.com/sasadangelo/k8s-cluster
只需输入vagrant up
,我的集群就可以启动并运行,并且可以开始使用它了。我熟悉了主要的概念和命令,并创建了一个简单的“ Hello World”应用程序,该应用程序由带有NGINX Web服务器的docker映像组成,您可以在其中通过浏览器进行连接,并出现带有主机名的“ Hello World”消息。主机名可以帮助我了解哪个Pod响应了我的请求。
这里是项目: https://github.com/sasadangelo/k8s-tutorials/tree/master/hello-k8s
当前,我可以使用kubectl create
创建一个部署,并使用kubectl expose
将其作为服务公开,然后使用kubect scale
增加副本。目前,我可以使用NodePort服务,因此通过kubectl describe service
,我可以看到5个Pod在哪个IP上侦听,连接到它们以及一切正常。
我的问题是,现在我想对流量进行负载平衡。 我想连接到一个IP ,并且当我单击浏览器的“重新加载”按钮时,我想看到出现了不同的Pod名称。
我知道Kubernetes默认情况下仅提供NodePort服务,如果我想要负载均衡器,则需要类似Ingress的东西。我也知道像Ingress Nginx这样的简单反向代理是满足我需要的很好的实现。
但是,我阅读了很多教程,但是我很难理解如何配置它以实现所需。
到目前为止,我有以下代码: https://github.com/sasadangelo/k8s-cluster/tree/master/ingress
任何人都可以帮助我修复Ingress代码以实现我所需要的吗?
答案 0 :(得分:2)
Kubernetes组件Kube Proxy通过iptables负载平衡在L4层提供负载平衡,因此使用ClusterIP类型服务本身可以在Pod之间获得负载平衡。但是使用clusterIP类型服务,您将无法从群集外部(即从浏览器)访问它。 Nodeport类型服务可通过kube代理在L4层进行负载平衡,从而从群集外部访问Pod。
如果您正在寻找的话,LoadBalancer和Ingress在L7层提供负载平衡和基于规则的路由。
查看您的代码,您拥有用于nginx入口控制器的yaml,并将其公开为Nodeport。接下来,您需要创建一个入口资源
.save_model()
在上面创建了入口后,您便为Pod拥有了一个ClusterIP类型的服务,该服务的名称Web暴露了端口8080,您应该可以访问它。
这里是doc,介绍了在Minikube上使用Nginx Ingress进行Hello World应用程序的操作,您也可以按照以下步骤在设置中使用Ingress。
答案 1 :(得分:0)
这是我为解决此问题而做的详细工作。首先,我安装了Nginx Ingress资源:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
然后我在ingress-nginx.yaml
文件中创建一个Nginx Ingress资源:
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: hello-k8s-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: hello-k8s.info
http:
paths:
- path: /
backend:
serviceName: hello-k8s
servicePort: 80
并使用以下命令进行安装:
kubectl apply -f ingress-nginx.yaml
您可以看到code here。
在集群内部(在任何节点上执行流浪ssh)我都测试过:
curl -H "Host: hello-k8s.info" IP
从命令获取IP的位置:
kubectl get ingress
假设它是10.97.139.101
。在群集外部,在Mac上(在Mac上的3 VirtualBox上运行)访问我需要添加路由的应用程序:
sudo route add -net 10.97.0.0/16 192.168.205.10
其中192.168.205.10是主节点的IP。在/etc/hosts
中,添加了以下行:
10.97.139.101 hello-k8s.info
现在在浏览器中键入hello-k8s.info,我看到出现“ Hello World”网页。 感谢Arghya Sadhu的帮助。