如何使用kubeadm(k8s 1.4)部署Kubernetes nginx控制器?

时间:2016-10-18 23:56:59

标签: docker kubernetes

AWS + Kubeadm(k8s 1.4) 我尝试按照README:

  

https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx

但这似乎不起作用。我松懈地问了一下,似乎yamls已经过时了,我不得不这样修改

首先我使用git上的yaml部署了default-http-backend:

  

https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/default-backend.yaml

接下来,ingress-RC我不得不修改:

  

https://gist.github.com/lilnate22/5188374

(请注意更改以获取healthz的路径以反映default-backend以及根据松弛显然需要的10254端口更改

一切都运行良好 kubectl get pods我看到了入口控制器 kubectl get rc我看到1 1 1为ingress-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

接下来我创建了一个简单的入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  backend:
    serviceName: echoheaders-x
    servicePort: 80

get 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似乎没有用,因为我“无法到达服务器”

5 个答案:

答案 0 :(得分:4)

不幸的是,目前似乎不支持使用kubenem设置使用kubernetes集群的入口控制器。

原因是入口控制器指定 hostPort 以便在节点的公共IP上可用,但kubeadm创建的集群使用CNI网络插件目前which does not support hostPort

你可能有更好的运气picking a different way to set up the cluster,它不使用CNI。

或者,您可以编辑ingress-rc.yaml以在“spec:”部分下声明“hostNetwork:true”。指定hostNetwork将使容器使用主机的网络命名空间运行,从而允许它们访问主机的网络接口,路由表和iptables规则。可以认为这相当于“docker run”,选项为--network =“host”。

答案 1 :(得分:2)

对于那些来到这里的人来说,想知道同样的事情是好的......我是如何解决它的。

PRECURSOR:文档含糊不清,以至于阅读文档,我的印象是,通过README运行将允许我访问http:// {MY_MASTER_IP}并获取我的服务...这不是真的

为了获得ingress_controller,我必须为ingress-controller创建一个服务,然后通过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}并基于主机(类似于README)

答案 2 :(得分:1)

你可以使用图像nginxdemos / nginx-ingress:0.3.1,你不需要自己构建

答案 3 :(得分:0)

@nate的答案是正确的

https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#over-a-nodeport-service

还有更多细节。

尽管如此,他们不建议您设置服务的节点端口范围

答案 4 :(得分:0)

这个问题是Google搜索结果中的第一个,我将添加解决方案。

kubeadm v1.18.12

头盔v3.4.1

是的,最简单的方法是使用头盔。我也使用标准入口https://github.com/kubernetes/ingress-nginx

添加存储库

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

安装入口

helm install ingress --namespace ingress --create-namespace --set rbac.create=true,controller.kind=DaemonSet,controller.service.type=ClusterIP,controller.hostNetwork=true ingress-nginx/ingress-nginx

Daedmonset使Ingress在群集中的每个节点上均可使用。

hostNetwork = true 指定使用节点的公共IP地址。

之后,您需要配置进入规则并设置必要的DNS记录。