当前位置: 首页 > 知识库问答 >
问题:

更改Kubernetes nginx入口控制器端口

方波娃
2023-03-14

我在RedHat EC2实例上安装了Minikube v1.3.1以进行一些测试。

由于nginx-ingress-控制器默认使用的端口已经在使用中,我正在尝试在部署中更改它们,但没有结果。有人能建议如何做吗?

如何知道端口已在使用?

当我使用命令kubectl-n kube system get deployment | grep nginx列出系统吊舱时,我得到:

nginx入口控制器0/1 1 0 9d

这意味着我的容器没有升起。当我使用命令kubectl-n kube system DESCRIPE pod nginx-ingress-controller-xxxxx对其进行描述时,我得到:

类型原因年龄来自
消息 ---- ------ ----
---- ------- 警告失败CreatePodSandBox42m(x163507 over 2d1h)kubelet, mini kube(来自类似事件的组合):创建pod沙盒失败: rpc错误: code=未知desc=无法启动pod“nginx-ingres-Controler-xxxx”的沙盒容器:来自守护进程的错误响应:驱动程序在endpointk8s_POD_nginx上编程外部连接失败-ingres-Controler-xxxx_kube-system_...:启动用户区域代理时出错:监听tcp0.0.0.0:443: bind:地址已在使用中

然后我检查使用这些端口的进程,然后杀死它们。这将释放它们,入口控制器吊舱将正确部署。

我尝试了什么来更改nginx入口控制器端口?

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的子部分,但当我展开更改时,它们会再次添加

现在我的服务无法通过入口访问。

共有3个答案

沈皓君
2023-03-14

嗯,我认为您必须修改入口,它引用您试图在自定义端口上公开的服务。

这可以通过自定义注释完成。以下是端口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
苏培
2023-03-14

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

启用某些特定的mini kube插件后,插件管理器会通过将每个组件放置到主机上的/etc/kubernetes/addons/文件夹中为每个组件创建模板文件,然后启动每个清单文件,创建相应的K8s资源;此外,插件管理器会根据模板数据不断检查所有插件资源的实际状态,同步K8s目标资源(服务、部署等)。

因此,您可以考虑在/etc/kubernetes/addons/目录下的ingress-*. yaml文件中修改Inete插件模板数据,将所需值传播到目标k8s对象中;在K8s引擎反映更改并重新生成基于ReplicaSet的相对资源之前,可能需要一些时间。

有权
2023-03-14

请注意,minikube附带插件管理器,该管理器的作用是监视特定的插件模板文件(默认位置:/etc/kubernetes/addons/),并根据托管资源的标签值执行以下两个特定操作之一:

addonmanager。库伯内特斯。io/模式

  1. 添加管理器。库伯内特斯。io/模式=协调

将定期对账。不鼓励通过apiserver直接操作这些插件,因为插件管理器会将它们恢复到原始状态。特别地

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

因此,要保留默认入口服务侦听端口的自定义版本,请首先将minikube VM上的入口部署模板配置更改为KeepOnly。

 类似资料:
  • 我们正在GKE(谷歌kubernetes引擎)上运行一个API服务器。我们使用Google云endpoint和API密钥处理授权。我们将每个API密钥上的某些IP地址列为白名单。为了做到这一点,我们必须将负载平衡器转换为入口控制器,以公开我们的API服务器。IP白名单不适用于loadbalancer服务。现在,我们有一个类似以下内容的入口设置:

  • 我正在设置我的入口控制器、入口类和入口,以在集群外部公开服务。这是全新的集群设置。 我已经使用 nginx 入口控制器设置了 nginx-ingress 控制器 <code>kubectl应用-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.0/deploy/static/provider/b

  • 我正在使用一个著名的第三方打包系统打包一些python包,并且在创建入口点的方式上遇到了一个问题。 当我在我的机器上安装一个切入点时,切入点将包含一个指向任何python解释器的文件,就像这样: 在 /home/me/development/test/setup.py 在/home/me/中。virtualenvs/test/bin/some入口点: 如您所见,切入点样板包含一个硬编码的Pytho

  • 新来的。我想知道是否有人可以帮助我区分我可以用来识别入口控制器和通过YAML和服务识别入口的特征。我有一个预先存在的集群,我认为入口控制器可能是通过helm安装的,但我不确定。有没有办法了解helm在安装nginx ingress控制器时使用的yaml?

  • GCP入口的以下注释等效于什么?我试图使用一个自定义的nginx模板,但我找不到以下注释的参考。在github的回答中,他们使用的是AWS,但我需要使用GCP来实现这一点。 我正在使用ingress类nginx 我正在尝试使用入口控制器在GCP Kubernetes集群中进行入口TCP SSL终止。 我想要来自<代码>https://example.com:1234重定向到

  • 操作系统:RHEL7|k8s版本:1.12/13|kubes祈祷|裸机 我部署了一个标准的kubespray裸机集群,我正在尝试了解部署nginx ingress controller的最简单推荐方法是什么,它将允许我部署简单的服务。没有提供负载平衡器。我希望我的主公共IP作为我的服务的endpoint。 Github k8s ingress nginx建议将节点端口服务作为“强制”步骤,这似乎不