繁体   English   中英

更改 Kubernetes 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

  1. addonmanager.kubernetes.io/mode=Reconcile

会定期调和。 不鼓励通过 apiserver 直接操作这些插件,因为 addon-manager 会将它们带回原始状态。 特别是

  1. addonmanager.kubernetes.io/mode=KeepOnly

将仅检查是否存在。 用户可以根据需要编辑这些插件。

因此,为了保留您自定义版本的默认 Ingress 服务侦听端口,请先在 minikube VM KeepOnly Ingress 部署模板配置更改为KeepOnly

基本上, minikube引导 Nginx入口控制器作为单独的插件,因此根据设计,您可能必须启用它才能在minikube集群中传播特定入口控制器的资源。

一旦你启用了一些特定的minikube AddonAddon-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM