【问题标题】:How to expose 80 port in kubernetes nginx controller如何在 Kubernetes nginx 控制器中暴露 80 端口
【发布时间】:2020-11-01 10:05:42
【问题描述】:

我在几个树莓派 4 中安装了 kubernete,没有使用云。 我按照教程部署 mongodb 和 mongo express,我可以 使用节点端口模式进入 mongo express 网站。 但是,当我更改为使用 nignx 控制器时,它会在我 输入 ip address:port (192.168.1.194:30574 这是我的主节点 ip,端口是 ingress-nginx-controller 暴露的地方) 或 domain:port (mymongo.com:30574)。 但是如果我只使用没有端口的域名(mymongo.com),它就无法进入网站。我错过了什么吗?谢谢! 这是我的 yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata: 
  name: mongo-express-ingress
spec:
  rules:
   - host: "mymongo.com"
   - http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: mongo-express-service
            port:
              number: 8081
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo-express
  labels:
    app: mongo-express
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo-express
  template:
    metadata:
      labels:
        app: mongo-express
    spec:
      containers:
        - name: mongo-express
          image: mongo-express
          ports:
            - containerPort: 8081
          env:
            - name: ME_CONFIG_MONGODB_ADMINUSERNAME
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key: mongo-root-username
            - name: ME_CONFIG_MONGODB_ADMINPASSWORD 
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key: mongo-root-password
            - name: ME_CONFIG_MONGODB_SERVER
              valueFrom:
                configMapKeyRef:
                  name: mongodb-configmap
                  key: database_url
---
apiVersion: v1
kind: Service
metadata:
  name: mongo-express-service
spec:
  selector:
    app: mongo-express
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081

ubuntu@master:~/k8s-config$ kubectl get services --all-namespaces
NAMESPACE              NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
default                kubernetes                           ClusterIP   10.96.0.1       <none>        443/TCP                      8d
default                mongo-express-service                ClusterIP   10.107.95.131   <none>        8081/TCP                     6d19h
default                mongodb-service                      ClusterIP   10.101.118.57   <none>        27017/TCP                    6d19h
ingress-nginx          ingress-nginx-controller             NodePort    10.96.94.30     <none>        80:30574/TCP,443:31882/TCP   6d4h
ingress-nginx          ingress-nginx-controller-admission   ClusterIP   10.104.121.41   <none>        443/TCP                      6d4h
kube-system            kube-dns                             ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP       8d
kubernetes-dashboard   dashboard-metrics-scraper            ClusterIP   10.99.4.159     <none>        8000/TCP                     6d22h
kubernetes-dashboard   kubernetes-dashboard                 NodePort    10.98.92.238    <none>        443:31044/TCP             

【问题讨论】:

    标签: nginx kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    在您当前的配置中,它按预期工作。

    您的Nginx Ingress Controller 配置为NodePort Type

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

    因此,如果您使用 NodePort 类型,则只有在指定 NodeIP:NodePort> 时才能连接,在您的情况下为 mymongo.com:30574 (NodeIP: mymongo. com, NodePort: 30574)。

    如果您只想使用域,则需要将ServiceType 视为LoadBalancer

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

    要在不使用 Cloud LoadBalancer 的情况下实现这一目标,您可以使用 MetalLB solution

    您当前的配置Nginx Ingress Documentation 中也被描述为Over a NodePort Service

    您也可以考虑使用 host network solution 作为baremaetal solution 的替代品。

    在没有可用的外部负载均衡器但不能使用 NodePorts 的设置中,可以将 ingress-nginx Pod 配置为使用它们运行的​​主机的网络,而不是专用的网络命名空间。这种方法的好处是 NGINX Ingress 控制器可以将端口 80 和 443 直接绑定到 Kubernetes 节点的网络接口,而无需 NodePort 服务强加的额外网络转换。

    template:
      spec:
        hostNetwork: true
    

    【讨论】:

      猜你喜欢
      • 2020-10-21
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2018-05-22
      相关资源
      最近更新 更多