当前位置: 首页 > 知识库问答 >
问题:

Kubernetes nginx ingress controller服务(版本0.9.0)拒绝连接

司空通
2023-03-14

我尝试按照本教程来使用nginx入口控制器。在我尝试让它工作的过程中,一些细节发生了变化——只有一个后端服务而不是两个,一些端口号和所有内容都在默认名称空间中运行。我在CentOS Linux 7.4.1708版虚拟机上有一个kubernetes主机和三个仆从。

后端和默认后端都可以通过各自的服务endpoint在集群内访问。nginx状态页面在外部可用(MasterHostIP:32000/nginx\u状态)。问题是,通过外部路径或从集群内部到nginx入口控制器服务endpoint,对后端应用程序的http请求被拒绝。希望有人能看到我明显遗漏的东西,或者有类似的问题,并且知道如何克服。

[root@master1 ~]# kubectl get endpoints
NAME              ENDPOINTS                                         AGE
appsvc1           10.244.1.2:80,10.244.3.4:80                       3h
default-backend   10.244.1.3:8080,10.244.2.3:8080,10.244.3.5:8080   14d
kubernetes        10.134.45.136:6443                                15d
nginx-ingress     10.244.2.5:18080,10.244.2.5:9999                  2h
[root@master1 ~]# wget 10.244.2.5:9999
--2018-01-05 12:10:56--  http://10.244.2.5:9999/
Connecting to 10.244.2.5:9999... failed: Connection refused.
[root@master1 ~]# wget 10.244.2.5:18080
--2018-01-05 12:12:52--  http://10.244.2.5:18080/
Connecting to 10.244.2.5:18080... connected.
HTTP request sent, awaiting response... 404 Not Found
2018-01-05 12:12:52 ERROR 404: Not Found.

对appsvc1endpoint的请求按预期运行,返回带有“Hello app1!”的静态html。

后端应用程序部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app1
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: app1
    spec:
      containers:
      - name: app1
        image: dockersamples/static-site
        env:
        - name: AUTHOR
          value: app1
        ports:
        - containerPort: 80

后端服务

apiVersion: v1
kind: Service
metadata:
  name: appsvc1
spec:
  ports:
  - port: 9999
    protocol: TCP
    targetPort: 80
  selector:
    app: app1

应用程序入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/rewrite-target: /
  name: app-ingress
spec:
  rules:
  - host: test.com
    http:
      paths:
      - backend:
          serviceName: appsvc1
          servicePort: 9999
        path: /app1

nginx入口控制器部署

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-ingress-controller
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  replicas: 1
  revisionHistoryLimit: 3
  template:
    metadata:
      labels:
        app: nginx-ingress-lb
    spec:
      terminationGracePeriodSeconds: 60
      serviceAccount: nginx
      containers:
      - name: nginx-ingress-controller
        image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.9.0
        imagePullPolicy: Always
        readinessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
        livenessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
          initialDelaySeconds: 10
          timeoutSeconds: 5
        args:
          - /nginx-ingress-controller
          - '--default-backend-service=$(POD_NAMESPACE)/default-backend'
          - '--configmap=$(POD_NAMESPACE)/nginx-ingress-controller-conf'
          - --v=6
        env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
        ports:
          - containerPort: 80
          - containerPort: 9999
          - containerPort: 18080

nginx入口控制器服务

apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress
spec:
  type: NodePort
  ports:
    - port: 9999
      nodePort: 30000
      name: http
    - port: 18080
      nodePort: 32000
      name: http-mgmt
  selector:
    app: nginx-ingress-lb

nginx入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: test.com
    http:
      paths:
      - backend:
          serviceName: nginx-ingress
          servicePort: 18080

更新看起来端口9999在入口控制器pod中没有打开。有人能建议为什么端口18080被打开而不是9999吗?:

[root@master1 ~]# kubectl get pods
NAME                                       READY     STATUS    RESTARTS   AGE
app1-54cf69ff86-l7kp4                      1/1       Running   0          17d
app1-54cf69ff86-qkksw                      1/1       Running   0          17d
app2-7bc7498cbf-459vd                      1/1       Running   0          2d
app2-7bc7498cbf-8x9st                      1/1       Running   0          2d
default-backend-78484f94cf-fv6v4           1/1       Running   0          17d
default-backend-78484f94cf-vzp8l           1/1       Running   0          17d
default-backend-78484f94cf-wmjqh           1/1       Running   0          17d
nginx-ingress-controller-cfb567f76-wbck5   1/1       Running   0          15h
[root@master1 ~]# kubectl exec  nginx-ingress-controller-cfb567f76-wbck5 -it bash
root@nginx-ingress-controller-cfb567f76-wbck5:/# netstat -tlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN      14/nginx: master pr
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN      14/nginx: master pr
tcp        0      0 0.0.0.0:https           0.0.0.0:*               LISTEN      14/nginx: master pr
tcp        0      0 0.0.0.0:https           0.0.0.0:*               LISTEN      14/nginx: master pr
tcp        0      0 0.0.0.0:18080           0.0.0.0:*               LISTEN      14/nginx: master pr
tcp        0      0 0.0.0.0:18080           0.0.0.0:*               LISTEN      14/nginx: master pr
tcp6       0      0 [::]:http               [::]:*                  LISTEN      14/nginx: master pr
tcp6       0      0 [::]:http               [::]:*                  LISTEN      14/nginx: master pr
tcp6       0      0 [::]:https              [::]:*                  LISTEN      14/nginx: master pr
tcp6       0      0 [::]:https              [::]:*                  LISTEN      14/nginx: master pr
tcp6       0      0 [::]:18080              [::]:*                  LISTEN      14/nginx: master pr
tcp6       0      0 [::]:18080              [::]:*                  LISTEN      14/nginx: master pr
tcp6       0      0 [::]:10254              [::]:*                  LISTEN      5/nginx-ingress-con

共有1个答案

宗政元青
2023-03-14

10、x地址为内部地址。所以404是可以预期的。入口控制器不会突然将您的内部服务外部化。入口服务应该通过单个地址将请求代理给部署的服务。由于我看到您通过节点端口部署了控制器,请尝试使用主机头测试向节点的IP端口30000发出请求。com你应该获得你的应用程序。您外部化的每个服务都将通过入口IP可用,主机头由HTTP客户端设置,入口控制器将基于此(以及路径和您想要的任何其他内容)扇出请求。所以实际上,只有当你为域名付费时,它才有效,因为我假设你没有自己的测试。com和要求用户伪造请求头不是一个合理的接口

此外,由于您有minion节点(复数),因此您应该将控制器服务类型从NodePort更改为LoadBalancer。为了更便宜,教程中使用了节点端口-LoadBalancer将启动一个云负载平衡器,您需要为此付费。节点端口在定位时是可以的,但肯定不是以后可以做的事情。我真的希望人们不要在没有任何解释的情况下把它放在教程中

 类似资料:
  • 我是库伯内特斯的初学者。我正在尝试安装迷你库贝,想在库伯内特斯中运行我的应用程序。我正在使用乌班图 16.04 我已遵循此处提供的安装说明https://kubernetes.io/docs/setup/learning-environment/minikube/#using-带有http代理的minikube 问题1:在安装了kubectl、virtualbox和minikube之后,我运行了命

  • 我正在尝试连接两个docker容器,一个是posgresql,另一个是python flask应用程序。两者都链接正确,python应用程序中的所有连接变量都直接取自postgres容器中通过链接公开的连接变量,并且与检查postgresql容器时发现的连接变量相同。当我将psql与连接字符串中的精确参数一起使用时,即: 成功连接到postgres容器中的数据库,因此我知道postgres正在通过

  • 问题内容: 前几天,我的GoDaddy托管网站遇到了一些问题。我打电话给他们的技术支持,与我交谈的人建议我的问题与我在Windows机器上,最好在Linux机器上使用有关。我对此没有意见,我同意了,他们把我换了。 过渡之后,我的PHPMailer功能让我迷茫了。我已经工作了几个月,所以我知道我的设置是正确的。我已与GoDaddy确认,从他们的角度来看,我要发送的帐户并未更改。用户侧未进行任何更改(

  • 我试图部署一个ConfigServrService和一个客户端与远程存储库使用DockerComplace。 docker-compose.yml就像: 在它们部署的那一刻,客户端控制台显示: C. C. C. ConfigServiceProperty tySourceLocator:从服务器获取配置:http://localhost:8888 (而不是http://config-server:

  • 我正在使用NAT开发一个微服务web应用程序(React和Node)并在GCP Kubernetes集群上运行它。 我无法连接到NAT流服务器POD。端口4222和8222是打开的。我收到连接拒绝错误。 $kubectl描述服务NAT-Srv

  • 拒绝服务(DoS)攻击是黑客企图使网络资源不可用的一种攻击。它通常会临时或无限地中断主机,让正常使用的用户无法访问目标服务。这些攻击通常针对托管在关键任务Web服务器(如银行,信用卡支付网关)上的服务。 DoS的症状 网络性能异常缓慢。 特定网站不可用。 无法访问任何网站。 收到的垃圾邮件数量大幅增加。 长期拒绝访问网络或任何互联网服务。 特定网站不可用。 动手实践 第1步 - 启动WebGoat