首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NGINX Ingress创建NodePort而不是LoadBalancer

NGINX Ingress创建NodePort而不是LoadBalancer
EN

Stack Overflow用户
提问于 2020-08-02 04:14:00
回答 1查看 604关注 0票数 1

我是第一次接触这种集装箱化的东西。我在Ubuntu18.04上运行minikube,我的安装地址是:https://kubernetes.github.io/ingress-nginx/deploy/,所以当我执行kubectl get services -n ingress-nginx时,只需执行minikube addons enable ingress

代码语言:javascript
复制
it shows 
NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.100.216.141   <none>        80:32205/TCP,443:31915/TCP   5d2h
ingress-nginx-controller-admission   ClusterIP   10.106.58.189    <none>        443/TCP                      5d2h

然而,根据我遵循的课程,ingress nginx-controller类型应该是负载均衡器。

我的入口配置:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - host: we-creators.dev
      http:
        paths:
          - path: /api/users/?(.*)
            backend:
              serviceName: auth-srv
              servicePort: 3000
          - path: /?(.*)
            backend:
              serviceName: client-srv
              servicePort: 3000
EN

回答 1

Stack Overflow用户

发布于 2020-08-06 18:02:01

我已经用2个最新的版本测试了这一点,目前我看到的是没有与ingress nginx控制器相关的服务(部署为minikube插件)。

请看一下ingress nginx部署中的端口。

使用此规范在kube-system命名空间中启用入口外接程序创建的部署:

代码语言:javascript
复制
...
spec:
  containers:
  - args: 
    - --report-node-internal-ip-address
...
    ports:
    - cotainerPort: 80
      hostPort:80
      name: http
      protocol: TCP
    - cotainerPort: 443
      hostPort: 443
      name: https
      protocol: TCP
...

看起来在当前的minikube版本中,ingress nginx正在使用--hostPorts而不是nginx的ingress nodeport服务。最重要的信息是您当前的cni网络插件是否支持Port-mapping

来自CNI networking plugin supports hostPort的官方文档

CNI网络插件支持hostPort。

您可以在minikube节点中检查此设置:

代码语言:javascript
复制
minikube -p your_name ssh
cat /etc/cni/net.d/your_config

"type": "portmap",
        "capabilities": {"portMappings": true},

限制与hostNetwork: true配置相同:

此部署方法的一个主要限制是在每个群集节点上只能调度一个NGINX Ingress控制器Pod,因为在同一网络接口上多次绑定同一端口在技术上是不可能的

-- report-node-internal-ip-address

因为裸机节点通常没有ExternalIP,所以必须启用--report-node- internal - IP -address标志,该标志将所有入口对象的状态设置为运行NGINX入口控制器的所有节点的内部IP地址。

ServiceTypes

  • 发布服务

Kubernetes ServiceTypes允许您指定所需的服务类型。的默认值是ClusterIP

类型值及其行为如下:

  • ClusterIP:在群集内部IP上公开服务。选择此值将使服务只能从群集内访问。这是默认的ServiceType.

  • NodePort:在静态端口( NodePort)上公开每个节点的IP上的服务。NodePort服务路由到的ClusterIP服务是自动创建的。您可以通过以下请求从群集外部联系NodePort服务:.

  • LoadBalancer:使用云提供商的负载均衡器在外部公开服务。自动创建外部负载平衡器路由到的NodePort和ClusterIP服务。

服务类型Loadbalancer的特别说明

服务类型设置为LoadBalancer时,Kubernetes向集群内的pod提供等同于type equals ClusterIP的功能,并通过使用Kubernetes pod的条目对(Kubernetes外部)负载均衡器进行编程来扩展该功能。Kubernetes服务控制器自动创建外部负载均衡器、运行状况检查(如果需要)、防火墙规则(如果需要),并检索云提供商分配的外部IP并将其填充到服务对象中

作为裸机环境中的解决方法,您可以使用

MetalLB为不在受支持的云提供商上运行的Kubernetes集群提供网络负载均衡器实现,从而有效地允许在任何集群中使用LoadBalancer服务。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63209635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档