[英]Kubernetes Ingress not accessible (localhost)
我正在 Linux 机器上的本地主机上设置一个最小的 Kubernetes 集群(从签出的 repo 中的 hack/local-up-cluster 开始)。 在我的部署文件中,我定义了一个入口,它应该使部署在集群中的服务可以从外部访问。 部署.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 为我的入口显示以下内容:
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
资源只是定义您的集群如何处理 Ingress 流量。 它需要一个Ingress Controller来实际处理这些定义; 在未部署 Ingress 控制器的情况下创建 Ingress 资源不会产生任何影响。
从文档:
为了让 Ingress 资源工作,集群必须有一个 Ingress 控制器在运行。 这与其他类型的控制器不同,其他类型的控制器通常作为
kube-controller-manager
二进制文件的一部分运行,并且通常作为集群创建的一部分自动启动。 您需要选择最适合您的集群的入口控制器实现,或者实现一个。
您可以自己部署多个入口控制器(通常通过部署资源),例如NGINX 入口控制器(它是 Kubernetes 项目的一部分)或第三方入口控制器,如Traefik 、 Envoy或Voyager 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.