开发者社区 > 云原生 > 容器服务 > 正文

K8S 集群 ingress资源的ADDRESS怎样配置为多个工作节点的IP?

已解决

看我别人配置的ingress-nginx,ingress 的ADDRESS显示的是多个集群节点的IP,ingress控制器 TYPE是NodePort,cluster-ip并不是集群节点的IP。ADDRESS用多个集群节点的IP是为了,通过多个路口访问ingress,请问这怎么配置的??

展开
收起
游客awpmag6usqb6m 2023-05-19 18:35:55 450 0
8 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径
    采纳回答

    这种配置方式通常称为 "多节点 Ingress" 或 "多节点负载均衡"。它的主要思想是将多个节点的 IP 地址添加到 Ingress 的 ADDRESS 字段中,以便通过多个节点进行负载均衡和容错。这种方式可以提高 Ingress 的可用性和性能。

    要实现这种配置,您需要在 Ingress 控制器的配置文件中添加以下内容:

    yaml spec: externalTrafficPolicy: Local type: NodePort ports: - name: http port: 80 protocol: TCP targetPort: 80 selector: app: ingress-nginx externalIPs: - <node1_ip> - <node2_ip> - <node3_ip> 上面的配置文件中,externalTrafficPolicy: Local 表示只有在同一节点上运行的 Pod 才能接收到来自该节点的流量,这可以避免在节点之间转发流量。type: NodePort 表示使用 NodePort 类型的服务。externalIPs 字段中列出了所有节点的 IP 地址,这些 IP 地址将用于 Ingress 的 ADDRESS 字段。

    请注意,在使用多节点 Ingress 时,您需要确保所有节点都已安装 Ingress 控制器,并且它们使用相同的证书和配置文件。否则,您可能会遇到证书不匹配或配置不一致的问题。

    2023-05-19 18:42:16
    赞同 1 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,这种情况下,一般是通过Ingress Controller类型为NodePort,并且在每个Node上部署了Ingress Controller的方式来实现的。每个Node上的Ingress Controller会暴露相同的NodePort,但使用不同的Node IP。

    此时,在Ingress资源中定义的Service的type应该是ClusterIP,而不是NodePort或LoadBalancer。这样,Ingress Controller就会将请求代理到后端服务的Pod上。当然,也可以通过修改Ingress Controller的配置文件来更改Ingress Controller的行为。

    为了避免Ingress Controller的单点故障问题,可以使用Kubernetes自带的负载均衡器——kube-proxy,或者使用第三方的负载均衡器来实现高可用。

    2023-05-20 23:53:50
    赞同 1 展开评论 打赏
  • CSDN博客专家,51CTO博主专家,多知名企业认证讲师&amp;签约作者&amp;培训讲师,特邀作者等,华为云专家,资深测试开发专家,金牌面试官,职场面试培训及规划师。

    【回答】 可以通过配置Ingress Controller的Service来将流量分发到多个工作节点上。具体而言,可以按照以下步骤进行配置:

    创建一个新的Service,类型为NodePort或者LoadBalancer,将Ingress Controller部署到该Service的后端。

    在Ingress Controller的配置文件中,将Service的IP地址和端口号作为upstream servers配置。

    配置Ingress资源的地址为Service的IP地址和端口号。

    示例:

    1、创建Ingress Controller的Service

    apiVersion: v1kind: Servicemetadata:  name: ingress-controllerspec:  type: NodePort # 或者 LoadBalancer  selector:    app: ingress-controller  ports:  - name: http    port: 80    targetPort: 80
    
    

    2、修改Ingress Controller的配置文件

    apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: ingress-controllerspec:  template:    spec:      containers:      - name: nginx-ingress-controller        image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.24.1        args:        - /nginx-ingress-controller        - --configmap=$(POD_NAMESPACE)/nginx-configuration        - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services        - --udp-services-configmap=$(POD_NAMESPACE)/udp-services        - --default-backend-service=$(POD_NAMESPACE)/default-http-backend        - --v=2        - --report-node-internal-ip-address # 新增此参数        - --ingress-class=nginx        ports:        - name: http          containerPort: 80        - name: https          containerPort: 443
    

    3、配置Ingress资源的地址为Service的IP地址和端口号

    
    apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: my-ingressspec:  rules:  - host: my-host.com    http:      paths:      - path: /        pathType: Prefix        backend:          service:            name: my-service            port:              name: http
    
    2023-05-20 13:07:43
    赞同 展开评论 打赏
  • 使用多个集群节点的 IP 地址访问 Ingress 的方式可以通过 Ingress Controller(通常是 Nginx、Traefik 等)和 Kubernetes 中 Service 的功能实现。具体步骤如下:

    1. 在 Kubernetes 集群中部署一个 Ingress Controller(例如 Nginx、Traefik),并配置它的 Service 类型为 NodePort。

    2. 创建一个 Kubernetes Service,并将 Service 的类型设置为 ClusterIP,将 Ingress Controller 的 Pod IP 地址和 NodePort 暴露给这个 Kubernetes Service。

    3. 在 Ingress Controller 中配置多个映射规则(例如不同的域名绑定不同的后端服务),并将这些规则绑定到上一步创建的 Kubernetes Service 上。

    这样配置后,通过访问 Ingress Controller Service 的 ClusterIP 地址,就可以通过 Kubernetes 内部的负载均衡机制将请求转发到每个 Ingress Controller Pod 进行处理,从而实现多个集群节点的访问。

    在配置 Ingress Controller 时,需要将其 Service 类型设置为 NodePort,并将不同的节点 IP 地址绑定到这个 Service 上。一个常见的做法是,使用 kubeadm 管理 Kubernetes 集群,并在配置 kube-proxy 时指定多个虚拟 IP 地址绑定到不同的节点上,在 Ingress Controller Service 配置时使用这些虚拟 IP 地址作为 NodePort 的绑定地址。

    另外,在部署 Ingress Controller 时还需要配置一些其他的参数,例如网络策略、访问控制等,以确保 Ingress Controller 可以正常工作。

    总之,通过以上方式,就可以实现多个集群节点的访问 Ingress 的功能。

    2023-05-20 08:44:26
    赞同 1 展开评论 打赏
  • 热爱开发

    在Ingress-nginx中,可以通过配置ServiceType为NodePort实现将Ingress暴露到集群节点的IP上。当使用NodePort时,Kubernetes会分配一个随机的端口号,并将端口映射到所有节点的IP地址上。这样就可以通过任意节点的IP地址和指定的端口访问到Ingress。

    而多个节点IP地址都显示在Ingress的ADDRESS中,则说明Ingress Controller已经部署在多个节点上,并且每个节点的外部地址都可以用来访问Ingress。这种方式也被称为多节点部署方式,在多个节点上部署Ingress Controller能够提高稳定性和可靠性。

    如果想要通过多个路口访问Ingress,可以在Ingress配置文件中设置多个规则和路径,每个规则和路径对应不同的服务和路由。具体的配置方法可以参考Ingress-nginx官方文档。

    2023-05-20 08:44:22
    赞同 展开评论 打赏
  • 在Kubernetes中,Ingress是一种API对象,用于将外部的HTTP和HTTPS请求路由到集群内部的服务。Ingress控制器是负责实现Ingress规则的组件,通常使用ingress-nginx来实现。在ingress-nginx中,可以通过配置service的type为NodePort来启用NodePort模式,然后将Ingress控制器的服务暴露到NodePort上,从而实现通过多个节点IP访问Ingress的目的。

    具体配置步骤如下:

    1. 创建Ingress控制器的Service。在ingress-nginx的部署配置文件中,可以通过设置service.type为NodePort来启用NodePort模式,然后将service的端口设置为需要暴露的端口,例如80或443等。例如:
    apiVersion: v1
    kind: Service
    metadata:
      name: ingress-nginx
      namespace: ingress-nginx
    spec:
      type: NodePort
      ports:
      - name: http
        port: 80
        targetPort: http
        protocol: TCP
      - name: https
        port: 443
        targetPort: https
        protocol: TCP
    
    1. 配置Ingress规则。在Ingress规则中,可以使用多个host来配置多个路由入口,然后将路由入口对应到不同的服务上。例如:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
      - host: example1.com
        http:
          paths:
          - path: /app1
            pathType: Prefix
            backend:
              service:
                name: app1-service
                port:
                  name: http
      - host: example2.com
        http:
          paths:
          - path: /app2
            pathType: Prefix
            backend:
              service:
                name: app2-service
                port:
                  name: http
    

    在上述例子中,Ingress规则中定义了两个host:example1.com和example2.com,分别对应了两个路由入口,然后将这两个路由入口分别对应到了不同的服务上。

    1. 访问Ingress控制器。由于Ingress控制器的Service使用了NodePort模式,所以可以通过多个节点的IP地址加上暴露的端口来访问Ingress控制器。例如,在上述例子中,如果Ingress控制器的Service暴露了80端口,那么可以使用任意一个节点的IP地址加上80端口来访问Ingress控制器。
    2023-05-19 23:47:00
    赞同 展开评论 打赏
  • 在 Kubernetes 集群中,如果想要为 Ingress 资源配置多个工作节点的 IP,常见的解决方案包括:

    1. 手动维护多个 IP 并配置 DNS 解析:通过手动方式在每个工作节点上绑定多个 IP 地址,并在 DNS 服务器配置域名解析到这些 IP 地址上。

    2. 通过 NGINX 多播机制动态维护 IP:Kubernetes 中的 NGINX Ingress Controller 支持通过多播机制向所有工作节点动态分配 IP 地址,具体可参考相关文档。

    3. 使用 MetalLB 实现 IP 地址池管理:在 Kubernetes 集群中,可以使用 MetalLB 软件来动态管理 IP 地址池,将可用的 IP 地址动态地分配给 Ingress 资源,以实现高可用性和负载均衡。详细使用方法可参考 MetalLB 的官方文档。

    总之,在 Kubernetes 集群中为 Ingress 资源配置多个工作节点的 IP 时,可以通过手动维护 IP、使用 NGINX 多播机制或使用 MetalLB 实现 IP 地址池管理等多种方式来实现。具体选择何种方案,需要根据实际场景和需求进行灵活选择。

    2023-05-19 23:42:25
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    您好!根据您的描述,这个ingress-nginx的配置是为了实现通过多个节点的路由访问ingress。这种配置方式可以通过在ingress-nginx的Service中使用externalTrafficPolicy: Local来实现。具体步骤如下:

    1. 在ingress-nginx的Service中添加externalTrafficPolicy: Local,如下所示:
    apiVersion: v1
    kind: Service
    metadata:
      name: ingress-nginx-controller
      namespace: ingress-nginx
    spec:
      externalTrafficPolicy: Local
      type: NodePort
      ports:
        - name: http
          port: 80
          targetPort: http
          nodePort: 30080
        - name: https
          port: 443
          targetPort: https
          nodePort: 30443
      selector:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    1. 在ingress-nginx的ConfigMap中添加use-forwarded-headers: "true",如下所示:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx-configuration
      namespace: ingress-nginx
    data:
      use-forwarded-headers: "true"
    

    这样配置后,就可以通过多个节点的IP地址来访问ingress了。

    2023-05-19 23:32:26
    赞同 展开评论 打赏
滑动查看更多

国内唯一 Forrester 公共云容器平台领导者象限。

相关产品

  • 容器服务Kubernetes版
  • 相关电子书

    更多
    ACK 云原生弹性方案—云原生时代的加速器 立即下载
    ACK集群类型选择最佳实践 立即下载
    企业运维之云原生和Kubernetes 实战 立即下载

    相关镜像