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

入口重定向到localhosttcp服务

莫翰藻
2023-03-14

我有一个本地网站。该网站由docker compose创建,正在本地主机端口3000上侦听。

当我尝试时:

curl 127.0.0.1:3000

我能看到回应。

我所做的:

从我的域提供商处,我编辑了DNS以指向我的服务器,然后我更改了nginx入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: virtual-host-ingress
  namespace: ingress-basic
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/use-regex: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-pp"
spec:
  tls:
  - hosts:
    - nextformulainvesting.com
    secretName: ***
  rules:
  - host: "nextformulainvesting.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: e-frontend-saleor
            port:
              number: 80

我创建了服务:

apiVersion: v1
kind: Service
metadata:
  name: e-frontend-saleor
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000

但无论是否有服务,我都会收到错误信息,即503服务暂时不可用。

如何使用nginx入口指向本地TCP服务?

共有2个答案

常心水
2023-03-14

您创建的服务用于将流量转发到部署

由于您的服务正在库伯内特斯集群的一侧运行,因此在这种情况下您应该使用endpoint

apiVersion: v1
kind: Endpoints
metadata:
  name: my-service
subsets:
  - addresses:
      - IP: <External IP>
    ports:
      - port: 3000

您可以使用此endpoint进入,以便它将路由流量。

进入

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: virtual-host-ingress
  namespace: ingress-basic
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/use-regex: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-pp"
spec:
  tls:
  - hosts:
    - nextformulainvesting.com
    secretName: ***
  rules:
  - host: "nextformulainvesting.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: my-service
            port:
              number: 3000
昝欣可
2023-03-14

为了澄清这个问题,我在社区维基上发布了一个答案。

此链接提供了帮助解决此问题的答案。基于此,本案例的线索是为外部服务器手动创建服务和endpoint对象。

之后,可以创建一个入口对象,该对象将指向具有足够端口的服务外部ip。

以下是类似问题中提供的对象的示例。

  • 服务和endpoint对象:
apiVersion: v1
kind: Service
metadata:
  name: external-ip
spec:
  ports:
  - name: app
    port: 80
    protocol: TCP
    targetPort: 5678
  clusterIP: None
  type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
  name: external-ip
subsets:
- addresses:
  - ip: 10.0.40.1
  ports:
  - name: app
    port: 5678
    protocol: TCP

  • 入口对象:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: external-service
spec:
  rules:
  - host: service.example.com
    http:
      paths:
      - backend:
          serviceName: external-ip
          servicePort: 80
        path: /

另请参见本参考。

 类似资料:
  • 我有一个具有两个路径的角色的入口: SEO部署是正确的: 它开始正常工作。我找不到一个合理的动机支持这种行为。

  • 我在设置从8080到端口443的重定向时遇到问题。 场景如下:我有一个负载均衡器,监听端口80和443。对端口80的所有请求都转发到负载均衡器后面主机上的端口8080。对端口443的所有请求都转发到负载均衡器后面主机上的端口8443。 请求端口时http://address.com,它在负载平衡器上使用端口80,在主机上使用端口8080,这里一切正常。 重定向现在应指向https://addres

  • 在AWS EKS上,我有ALB入口控制器,入口资源指向端口32509上的NodePort服务,目标端口80,服务上有。 在这种情况下,外部流量如何在NodePort服务下路由到我的pod? 类似于,ALB

  • 我有两个kubernetes环境,它们使用入口作为代理重定向请求以服务静态(前端)和后端rest服务。 在其中一个环境中,这样的请求可以由两个主机URL访问(一个主机配置了tls cert secret),在另一个环境中,我没有配置任何tls secret,只能由一个主机URL访问 在第一个环境中(只有一个主机,没有TLS机密),我有以下几点: 在这个例子中,我可以通过HTTP完美地发出请求,一切

  • 我只有很少的spring boot微服务,它们是通过云环境部署到JBoss的。这些引导服务是在Eureka服务器中注册自己的Eureka客户端。下面是一个例子: 它用user-regn-service-app Eureka主页的名称向Eureka注册应用程序 wildfly服务器在8080处运行,而user-regn-service-app部署在上下文路径/user-regn-service-ap