如何使用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 ingdescribe 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}并基于主机(类似于自述文件)