![](/img/trans.png)
[英]Kubernetes's Ingress has no effect on nginx-ingress-controller
[英]Change Kubernetes nginx-ingress-controller ports
我在 RedHat EC2 实例上安装了 Minikube v1.3.1 以进行一些测试。
由于 nginx-ingress-controller 默认使用的端口已经在使用中,我试图在部署中更改它们但没有结果。 请有人建议如何做?
我如何知道该端口已在使用中?
当我使用命令kubectl -n kube-system get deployment | grep nginx
列出系统 pod 时kubectl -n kube-system get deployment | grep nginx
kubectl -n kube-system get deployment | grep nginx
,我得到:
nginx 入口控制器 0/1 1 0 9d
这意味着我的容器没有启动。 当我使用命令kubectl -n kube-system describe pod nginx-ingress-controller-xxxxx
描述它时,我得到:
键入原因年龄从
信息 - - - - - - -
---- ------- 警告 FailedCreatePodSandBox 42m (x163507 over 2d1h) kubelet、minikube(结合类似事件):创建 pod 沙箱失败:rpc 错误:代码 = 未知 desc = 无法为 pod 启动沙箱容器“ nginx-ingress-controller-xxxx”:来自守护进程的错误响应:驱动程序在端点 k8s_POD_nginx-ingress-controller-xxxx_kube-system_...已在使用中
然后我检查使用这些端口的进程并杀死它们。 这释放了它们并且入口控制器 pod 被正确部署。
我试图改变 nginx-ingress-controller 端口是什么?
kubectl -n kube-system get deployment | grep nginx
> NAME READY UP-TO-DATE AVAILABLE AGE
> nginx-ingress-controller 0/1 1 0 9d
kubectl -n kube-system edit deployment nginx-ingress-controller
我部署的相关部分如下所示:
name: nginx-ingress-controller
ports:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
- containerPort: 81
hostPort: 81
protocol: TCP
- containerPort: 444
hostPort: 444
protocol: TCP
- containerPort: 18080
hostPort: 18080
protocol: TCP
然后我删除了端口 443 和 80 的小节,但是当我推出更改时,它们又被添加了。
现在我的服务无法通过入口访问了。
请注意minikube附带addon-manager ,其作用是关注特定的插件模板文件(默认位置: /etc/kubernetes/addons/
)并根据管理资源的标签值执行以下两个特定操作之一:
addonmanager.kubernetes.io/mode
addonmanager.kubernetes.io/mode=Reconcile
会定期调和。 不鼓励通过 apiserver 直接操作这些插件,因为 addon-manager 会将它们带回原始状态。 特别是
addonmanager.kubernetes.io/mode=KeepOnly
将仅检查是否存在。 用户可以根据需要编辑这些插件。
因此,为了保留您自定义版本的默认 Ingress 服务侦听端口,请先在 minikube VM KeepOnly
Ingress 部署模板配置更改为KeepOnly
。
基本上, minikube
引导 Nginx入口控制器作为单独的插件,因此根据设计,您可能必须启用它才能在minikube
集群中传播特定入口控制器的资源。
一旦你启用了一些特定的minikube
Addon , Addon-manager为每个组件创建模板文件,将它们放入主机上的/etc/kubernetes/addons/
文件夹,然后启动每个清单文件,创建相应的 K8s 资源; 此外, Addon-manager 会根据模板数据持续检查所有同步K8s目标资源(服务、部署等)的插件资源的实际状态。
因此,您可以考虑修改/etc/kubernetes/addons/
目录下的ingress-*.yaml
文件中的Ingress插件模板数据,将所需的值传播到目标 k8s 对象中; 可能需要一些时间,直到 K8s 引擎反映更改并重新生成基于ReplicaSet的相关资源。
好吧,我认为您必须修改 Ingress,它指的是您尝试在自定义端口上公开的服务。
这可以通过自定义注释来完成。 这是您的端口 444 的示例:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myservice
namespace: mynamespace
annotations:
kubernetes.io/ingress.class: nginx
nginx.org/listen-ports-ssl: "444"
spec:
tls:
- hosts:
- host.org
secretName: my-host-tls-cert
rules:
- host: host.org
http:
paths:
- path: /
backend:
serviceName: my-service
servicePort: 444
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.