Docker 如何使用kubeadm(k8s1.4)部署Kubernetes nginx控制器?

Docker 如何使用kubeadm(k8s1.4)部署Kubernetes nginx控制器?,docker,kubernetes,Docker,Kubernetes,AWS+Kubeadm(k8s 1.4) 我尝试了以下自述: 但这似乎不起作用。我漫不经心地四处询问,似乎YAML已经过时了,我不得不这样修改 首先,我使用git上的yaml部署了默认http后端: 接下来,我必须修改入口RC: (注意获取路径到healthz的更改,以反映默认后端,以及端口到10254的更改,这显然是根据slack需要的) 一切正常 kubectl获得吊舱我看到入口控制器 kubectl get rc1我看到入口rc 然后部署简单的echoheaders应用程序(根据gi

AWS+Kubeadm(k8s 1.4) 我尝试了以下自述:

但这似乎不起作用。我漫不经心地四处询问,似乎YAML已经过时了,我不得不这样修改

首先,我使用git上的yaml部署了默认http后端:

接下来,我必须修改入口RC:

(注意获取路径到
healthz
的更改,以反映
默认后端
,以及端口到
10254
的更改,这显然是根据slack需要的)

一切正常
kubectl获得吊舱
我看到入口控制器
kubectl get rc
1我看到入口rc

然后部署简单的echoheaders应用程序(根据git自述):

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

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  backend:
    serviceName: echoheaders-x
    servicePort: 80
get ing
descripe 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)
名称:测试入口
名称空间:默认值

地址:172.30.2.86您只需使用图像nginxdemos/nginx-ingres:0.3.1,您无需自行构建

不幸的是,目前不支持使用入口控制器和使用kubeadm设置的Kubernetes群集

原因是入口控制器指定一个主机端口,以便在节点的公共IP上可用,但kubeadm创建的集群目前使用网络插件主机端口

如果不使用CNI,您的运气可能会更好


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

好的,对于所有来到这里的人来说,他们都想知道同样的事情。下面是我如何解决它的

先驱:文档模棱两可,以至于阅读文档时,我的印象是,通过自述文件可以访问http://{MY_MASTER_IP}并访问我的服务……这不是真的

为了获得ingress\u控制器,我必须为ingress控制器创建一个服务,然后通过
nodePort
公开该服务。这允许我通过http://{MASTER_IP}:{NODEPORT}访问服务(对于自述文件,
echoheaders

nodePort存在一个“问题”,即您得到一个随机端口#,这在某种程度上违背了进入的目的。。。为了解决这个问题,我做了以下工作:

首先:我需要编辑kube api以允许较低的节点端口IP

vi/etc/kubernetes/manifests/kube-apiserver.json

然后在kube api容器参数部分添加:
“--服务节点端口范围=80-32767”,

这将允许节点端口位于80-32767之间

**注意:我可能不建议将其用于生产**

接下来,我对svc nginx入口控制器进行了
kubectl编辑,并手动编辑了端口80的节点端口

这样,我就可以去{MY_MASTER_IP}去echoheaders


现在我能做的是,让不同的域指向{MY_MASTER_IP}并基于主机(类似于自述文件)

@nate的答案是正确的

有更多的细节


他们不建议设置服务的节点端口范围,尽管这是谷歌搜索结果中的第一个问题,我将添加我的解决方案

kubeadmv1.18.12

helm v3.4.1

是的,最简单的方法是使用头盔。我也使用标准入口

添加存储库

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
DAEDMONSIT使入口在集群中的每个节点上都可以随时使用

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


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

我不是在构建自己的入口,而是在使用来自nginx gcr.io/google_containers/nginx入口控制器的入口:0.8.3添加hostNetowkr:true有什么作用?顺便说一句,我通过一点黑客手段实现了这个“运行”:将入口控制器作为服务公开,然后将服务作为节点端口公开。我现在在答案中添加了关于“hostNetwork:true”实际功能的信息。我试图公开我的ingre控制器,但没有成功。你能给我们提供一个服务的例子吗?
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