Kubernetes Ingress 无法正确路由流量

Kubernetes Ingress 无法正确路由流量

我正在尝试使用 Kubernetes 托管一个简单的网站。我正在尝试使用 K8s 部署、服务和入口将来自外部的流量路由到在 pod 内运行的应用程序。

以下是我的 YAML 配置文件。

--- 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: trojanwall-deployment
  namespace: dev
  labels:
    app: trojanwall
spec:
  replicas: 1
  selector:
    matchLabels:
      app: trojanwall
  template:
    metadata:
      labels:
        app: trojanwall
    spec:
      containers:
      - name: trojanwall
        image: arbabu/trojan-wall:v1
        ports:
        - containerPort: 80 
--- 
apiVersion: v1
kind: Service
metadata:
  name: trojanwall-service
  namespace: dev
spec:
selector:
  app: trojanwall
ports:
- name: http
  protocol: TCP
  port: 3000
  targetPort: 80
type: ClusterIP 

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: trojanwall-ingress
  namespace: dev
spec:
  rules:
  - host: "ec2-3-96-217-161.compute-1.amazonaws.com"
    http:
      paths:
      - path: "/trojanwall"
        pathType: Prefix
        backend:
          service:
            name: trojanwall-service
            port:
              number: 3000

以下是资源状态。

在此处输入图片描述

预期是,当我运行类似“http://ec2-3-96-217-161.compute-1.amazonaws.com/trojanwall”的程序时,我应该能够访问我的网站。但是,我得到了以下信息。

在此处输入图片描述

有人知道如何正确配置入口流量吗?

答案1

你需要一个负载均衡器,它通常由你的云提供商提供(从主机名来看我猜是 AWS),但它很可能缺失,因为你还缺少

ingressClassName: nginx

在 yaml 文件的 spec 部分中。这样,云负载均衡器就可以在属于该类的 nginx-ingress 对象的状态部分中更新 LoadBalancer 的 IP 地址。

整个机制由 CCM(云控制器管理器)负责,它是 k8s 组件,提供路由和服务管理等云特定功能(https://kubernetes.io/docs/concepts/architecture/cloud-controller/#service-controller

当你的入口正确绑定时,它将显示如下内容:

$ kubectl get ingress
NAME        CLASS   HOSTS           ADDRESS       PORTS     AGE   
myingress   nginx   myhostname.my   10.11.12.13   80, 443   6d9h

这是我的入口清单(的一部分),供参考:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod   
  name: myingress
  namespace: myns
spec:
  ingressClassName: nginx
  rules:
  - host: myhostname.my
    http:
      paths:
      - backend:
          service:
            name: myservice
            port:
              number: 8080
        path: /
        pathType: Prefix

相关内容