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

nat*_*ate 4 docker kubernetes

AWS + Kubeadm(k8s 1.4)我尝试通过以下自述文件进行操作:

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 for 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
Run Code Online (Sandbox Code Playgroud)

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

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  backend:
    serviceName: echoheaders-x
    servicePort: 80
Run Code Online (Sandbox Code Playgroud)

双方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)
Run Code Online (Sandbox Code Playgroud)

但是尝试去公共ip节点似乎不起作用,因为我越来越无法访问服务器。

Rol*_*sen 5

不幸的是,目前尚不支持将入口控制器与使用kubeadm设置的Kubernetes集群一起使用。

原因是入口控制器指定了一个hostPort以便在节点的公共IP上可用,但是kubeadm创建的集群使用了目前不支持hostPortCNI网络插件。

您可能会幸运地选择另一种方式来设置不使用CNI 的群集

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