如何使用kubeadm(k8s 1.4)部署Kubernetes nginx控制器?
AWS + Kubeadm(k8s 1.4)我尝试了以下README:
https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx
但似乎没有工作。 我懒洋洋地问了一句,看来这些洋芋已经过时了,我不得不修改这些
首先我使用在git上find的yaml部署了default-http-backend:
https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/default-backend.yaml
接下来,入口RC我不得不修改:
https://gist.github.com/lilnate22/5188374
(注意改变path到healthz
以反映default-backend
以及端口改变为10254
,这根据松弛显然是需要的)
一切正常运行良好kubectl get pods
我看到入口控制器kubectl get rc
我看到1 1 1的入口rc
然后我部署简单的echoheaders应用程序(根据git自述):
kubectl run echoheaders --image=gcr.io/google_containers/echoserver:1.4 --replicas=1 --port=8080 kubectl expose deployment echoheaders --port=80 --target-port=8080 --name=echoheaders-x
接下来我创build了一个简单的入口:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test-ingress spec: backend: serviceName: echoheaders-x servicePort: 80
describe ing
和describe ing
都是一个好兆头:
Name: test-ingress Namespace: default Address: 172.30.2.86 <---this is my private ip Default backend: echoheaders-x:80 (10.38.0.2:8080) Rules: Host Path Backends ---- ---- -------- * * echoheaders-x:80 (10.38.0.2:8080)
但试图去节点公共IP似乎没有工作,因为我越来越“无法到达服务器”
不幸的是,使用kubeadm设置Kubernetes集群的入口控制器似乎并不支持。
原因是入口控制器指定一个hostPort为了在节点的公共IP上变得可用,而由kubeadm创build的集群使用目前不支持 hostPort的CNInetworking插件。
你可能有更好的运气select一个不同的方式来build立不使用CNI 的集群 。
或者,您可以编辑您的ingress-rc.yaml以在“spec:”部分下声明“hostNetwork:true”。 指定hostNetwork将使容器运行使用主机的networking名称空间,使他们能够访问主机的networking接口,路由表和iptables规则。 可以把它看作与“docker run”等效的选项–network =“host”。
你可以使用图像nginxdemos / nginx-ingress:0.3.1,你不需要自己构build
好吧,所有来到这里的人都想知道同样的事情。我的解决方法就是这样。
前言:文档是不明确的,阅读文档,我的印象是,运行README将允许我访问http:// {MY_MASTER_IP},并得到我的服务…这是不正确的。
为了得到ingress_controller,我必须为入口控制器创build一个服务,然后通过nodePort
公开这个服务。 这允许我通过http:// {MASTER_IP}:{NODEPORT}访问服务(在README, echoheaders
的情况下)
有一个与nodePort的“问题”,你得到一个随机端口#,这有点挫败了入口的目的…解决我做了以下几点:
首先:我需要编辑kube-api以允许较低的nodePort IP。
vi /etc/kubernetes/manifests/kube-apiserver.json
然后在kube-api容器参数部分添加: "--service-node-port-range=80-32767",
这将允许nodePort从80-32767。
** 注 :我可能不会推荐这个生产… **
接下来,我做了kubectl edit svc nginx-ingress-controller
并手动编辑nodePort到端口80。
这样,我可以去{MY_MASTER_IP}并得到回显头像。
现在我能做的是,有不同的域指向{MY_MASTER_IP}并基于主机(类似于自述文件)