Ske*_*ton 1 kubernetes kubectl kubernetes-go-client
我正在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
Run Code Online (Sandbox Code Playgroud)
我无法访问服务。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>
Run Code Online (Sandbox Code Playgroud)
是因为没有为我的入口设置地址,但外界看不到它吗?
一个Ingress资源就是你的集群如何处理入口流量的定义。它需要一个Ingress Controller来实际处理这些定义。在未部署Ingress控制器的情况下创建Ingress资源不会产生任何效果。
从文档中:
为了使Ingress资源正常工作,集群必须运行一个Ingress控制器。这不同于其他类型的控制器,后者通常作为
kube-controller-manager二进制文件的一部分运行,并且通常作为集群创建的一部分自动启动。您需要选择最适合您的集群的入口控制器实现,或者实现一个。
您可以自己配置多个Ingress控制器(通常是通过Deployment资源),例如NGINX Ingress控制器(属于Kubernetes项目)或第三方Ingress控制器(例如Traefik或Voyager)。
| 归档时间: |
|
| 查看次数: |
1983 次 |
| 最近记录: |