Kubernetes Ingress无法访问(本地主机)

6

我正在一台Linux机器上为本地主机设置一个最小的Kubernetes集群(从已检出的仓库开始使用hack/local-up-cluster)。 在我的部署文件中,我定义了一个入口,该入口应使在群集中部署的服务从外部可访问。Deployment.yml:

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: foo-service-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: foo-service
    spec:
      containers:
        - name: foo-service
          image: images/fooservice
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 7778
---
apiVersion: v1
kind: Service
metadata:
  name: foo-service-service
spec:
  ports:
    - port: 7778
  selector:
    app: foo-service
  type: NodePort
---    
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api-gateway-ingress
spec:
  rules:
  - host:
    http:
      paths:
      - path: /foo
        backend:
          serviceName: foo-service-service
          servicePort: 7779
      - path: /bar
        backend:
          serviceName: bar-service-service
          servicePort: 7776

我无法访问服务。kubectl describe显示我的Ingress如下:

Name:           api-gateway-ingress
Namespace:      default
Address:        
Default backend:    default-http-backend:80 (<none>)
Rules:
  Host  Path    Backends
  ----  ----    --------
  * 
        /foo    foo-service-service:7779 (<none>)
        /bar    bar-service-service:7776 (<none>)
Annotations:
Events: <none>

我的 ingress 还没有设置地址,所以外部世界看不到它吗?
1个回答

13
一个 Ingress 资源只是定义了集群如何处理入站流量的定义。它需要一个 Ingress Controller 来实际处理这些定义;如果没有部署 Ingress 控制器,创建 Ingress 资源将不会产生任何影响。
来自 文档

为了使 Ingress 资源正常工作,集群必须运行 Ingress 控制器。这与其他类型的控制器不同,其他类型的控制器通常作为 kube-controller-manager 二进制文件的一部分运行,并且通常在集群创建时自动启动。您需要选择适合您的集群的 Ingress 控制器实现,或者自己实现。

有几个 Ingress 控制器可供部署(通常通过 Deployment 资源),例如 Kubernetes 项目中的 NGINX ingress controller 或第三方 Ingress 控制器,如 TraefikEnvoyVoyager

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接