代码之家  ›  专栏  ›  技术社区  ›  Vahid Alimohamadi

K8s-使用nginx入口拒绝连接

  •  0
  • Vahid Alimohamadi  · 技术社区  · 6 年前

    我正在学习Kubernetes,我确实在裸机上创建了一个实验室,所以我是Kubernetes的新手!

    我确实创造了我的 deployment 它正在运行,可以使用访问 NodePort ,但当我使用 nginx-ingress nginx容器正在运行,它在容器内使用 curl localhost ,但当我从外部世界尝试时,我看到了这条消息: curl: (7) Failed to connect to app.example.com port 80: Connection refused

    这些是我的 app-service.yml app-ingress.yml 他们正在运行。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      ports:
      - port: 80
        targetPort: 3010
        protocol: TCP
        name: http
      selector:
        app: my-app
    
    kind: Ingress
    metadata:
      name: my-ingress
      labels:
        app: my-app
      annotations:
        # use the shared ingress-nginx
        kubernetes.io/ingress.class: "nginx"
    spec:
      rules:
      - host: app.example.com
        http:
          paths:
          - path: /
            backend:
              serviceName: my-app-service
              servicePort: 80
    

    还有我的部署:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app-deployment
      labels:
        app: my-app
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
            - name: my-app
              image: my-app:1.0
              ports:
                - containerPort: 3010
    

    命令: kubectl get all --namespace ingress-nginx 显示:

    NAME                                            READY   STATUS      RESTARTS   AGE
    pod/ingress-nginx-admission-create-tc8t7        0/1     Completed   0          73m
    pod/ingress-nginx-admission-patch-lnbcp         0/1     Completed   2          73m
    pod/ingress-nginx-controller-7fd7d8df56-bjmrm   1/1     Running     0          74m
    
    NAME                                         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
    service/ingress-nginx-controller             NodePort    10.110.64.201    <none>        80:30532/TCP,443:31993/TCP   74m
    service/ingress-nginx-controller-admission   ClusterIP   10.108.186.241   <none>        443/TCP                      74m
    
    NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/ingress-nginx-controller   1/1     1            1           74m
    
    NAME                                                  DESIRED   CURRENT   READY   AGE
    replicaset.apps/ingress-nginx-controller-7fd7d8df56   1         1         1       74m
    
    NAME                                       COMPLETIONS   DURATION   AGE
    job.batch/ingress-nginx-admission-create   1/1           5s         74m
    job.batch/ingress-nginx-admission-patch    1/1           19s        74m
    

    以及命令: kubectl get ing 显示:

    NAME          CLASS    HOSTS                  ADDRESS         PORTS   AGE
    my-ingress   <none>   app.example.com         X.X.X.X         80      11m
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Arghya Sadhu Dharmesh    6 年前

    ClusterIP 无法从kubernetes集群外部访问。 集群IP 提供L4层负载平衡。

    从文档 here 在裸机上nginx入口的几种选择

    1. 使用MetalLB作为纯软件负载均衡器实现
    2. 使用 NodePort 暴露nginx入口控制器的服务。请注意,您没有使用 NodePort 露出常规吊舱。您将受益于nginx的L7层负载平衡。
    3. 使用以下命令运行nginx hostNetwork:true

    如果你选择我认为最简单的选项3,你可以通过ingress使用 curl http://<NODEIP> -H "Host: app.example.com"

    推荐文章