AWS + Kubeadm(k8s 1.4) 我尝试按照README:
https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx
但这似乎不起作用。我松懈地问了一下,似乎yamls已经过时了,我不得不这样修改
首先我使用git上的yaml部署了default-http-backend:
接下来,ingress-RC我不得不修改:
(请注意更改以获取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 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似乎没有用,因为我“无法到达服务器”
答案 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}
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记录。