rancher2下的nginx-ingress出现问题不能启动成功

本文介绍了在Rancher2集群中遇到的Nginx-Ingress端口11111被占用的问题,并详细记录了排查过程。最终发现是由于另一个服务使用了相同的端口导致的冲突,通过停止该服务解决了问题。

最近rancher2集群出现nginx-ingress出现 端口11111 already in use ,please check --status port感觉好像是nginx-ingress需要使用11111端口,而被其它服务使用,排查下确实有个服务在使用此端口号,使用netstat -pan |grep 18080发现kube-proxy在占用,停止后nginx-ingress就恢复正常了。nginx-ingress在racher下的system项目命名空间。

这里出现这个原因目前怀疑是,有个服务暴露nodeport端口号18080,至于nginx-ingress为什么会使用随机端口18080还需要了解里面机制,后续会补充。

### Rancher 2.11.1 中配置 Ingress 不监听 80 端口的方法 在 Kubernetes 集群中,Ingress 默认会监听 80 和 443 端口。然而,在某些场景下可能需要禁用对 80 端口的监听。以下是针对此需求的具体方法: #### 修改 Nginx Ingress Controller启动参数 Nginx Ingress Controller 提供了一个名为 `--http-port` 的选项,默认情况下该选项设置为 80。如果不需要监听 80 端口,则可以通过调整其部署文件中的容器命令部分来移除对该端口的支持。 具体操作如下: 1. 编辑 Nginx Ingress Controller 的 Deployment 文件。 2. 找到容器的 `args` 参数列表,并删除或注释掉与 `--http-port=80` 相关的内容。 ```yaml spec: template: spec: containers: - name: nginx-ingress-controller args: - /nginx-ingress-controller - --configmap=$(POD_NAMESPACE)/nginx-configuration - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services - --udp-services-configmap=$(POD_NAMESPACE)/udp-services - --publish-service=$(POD_NAMESPACE)/ingress-nginx # 注释掉以下行以停止监听80端口 #- --http-port=80 - --https-port=443 ``` 完成以上更改后保存并应用新的配置即可[^2]。 #### 使用自定义 Service 定义 另一种方式是通过修改关联的服务 (Service),使其不再暴露 80 端口。默认情况下,Nginx Ingress Controller 创建的服务会同时开放两个端口(即 TCP 协议下的 80 和 443)。为了仅保留 HTTPS 支持,可重新定义服务描述符如下所示: ```yaml apiVersion: v1 kind: Service metadata: name: ingress-nginx-controller namespace: ingress-nginx spec: type: LoadBalancer ports: - name: https port: 443 targetPort: https protocol: TCP selector: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: nginx-ingress-controller ``` 这里需要注意的是,由于去除了标准 HTTP 访问途径,所以客户端必须始终采用加密连接才能正常工作[^4]。 #### 注意事项 当决定关闭未加密通道时,请确保所有应用程序都能够支持 TLS 终止功能。此外还需确认上游负载均衡设备或者防火墙策略允许直接访问所选替代端口号比如上面提到过的8880作为例子。 --- ### 示例代码片段 下面给出一段完整的 YAML 片段用于展示如何更新现有控制器实例及其对应的服务声明: ```yaml --- apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: nginx-ingress-controller name: ingress-nginx-controller namespace: ingress-nginx spec: replicas: 1 selector: matchLabels: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: nginx-ingress-controller template: metadata: annotations: prometheus.io/path: /metrics prometheus.io/port: "10254" prometheus.io/scrape: "true" creationTimestamp: null labels: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: nginx-ingress-controller spec: containers: - args: - /nginx-ingress-controller - --election-id=ingress-controller-leader - --ingress-class=nginx - --configmap=$(POD_NAMESPACE)/nginx-configuration - --validating-webhook=:8443 - --validating-webhook-certificate=/usr/local/certificates/cert - --validating-webhook-key=/usr/local/certificates/key - --watch-namespace= - --default-backend-service=$(POD_NAMESPACE)/default-http-backend - --https-port=443 env: - name: POD_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace image: k8s.gcr.io/ingress-nginx/controller:v1.0.0-beta.1 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 3 httpGet: path: /healthz port: 10254 scheme: HTTP initialDelaySeconds: 10 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 name: nginx-ingress-controller readinessProbe: failureThreshold: 3 httpGet: path: /healthz port: 10254 scheme: HTTP initialDelaySeconds: 10 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 resources: {} securityContext: allowPrivilegeEscalation: true capabilities: add: - NET_BIND_SERVICE drop: - ALL runAsUser: 101 terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler serviceAccount: ingress-nginx serviceAccountName: ingress-nginx terminationGracePeriodSeconds: 60 --- apiVersion: v1 kind: Service metadata: name: ingress-nginx-controller namespace: ingress-nginx spec: externalTrafficPolicy: Local ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: https port: 443 protocol: TCP targetPort: 443 selector: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: nginx-ingress-controller sessionAffinity: None type: LoadBalancer ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值