我正在尝试创建NGINX-INGRESS(首先在本地创建,然后在负载均衡器之后部署到AWS)。但是我是Kubernetes的新手,我了解NGINX的 Ingress 模型-这些配置使我感到困惑,因为我应该部署NGINX-INGRESS Service , 入口 或 两者
我正在使用多个我希望通过路径(/users
,/content
等进行路由的Flask-App),我的服务在user-service
上被命名为port: 8000
(它们的容器端口也是8000)
在this示例中,定义了 Ingress 。但是,当我应用Ingress(在与Flask相同的名称空间中)时,http://localhost
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-name
namespace: my-namespace
spec:
rules:
- http:
paths:
- path: /users
backend:
serviceName: users-service
servicePort: 8000
- path: /content
backend:
serviceName: content-service
servicePort: 8000
此外,查看nginx-ingress“部署”文档,在Mac的Docker下(我假设我可以在MacOS上使用 Docker 的情况下可以使用它们){{3} }:
kind: Service
apiVersion: v1
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
externalTrafficPolicy: Local
type: LoadBalancer
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
---
这似乎对我有用(当我打开“ localhost”时,我得到Nginx“未找到”,但这是与我的应用程序不同的名称空间中的服务,并且端口80/443与我的端口之间没有关联)服务端口。
作为参考,这是我的部署/服务定义之一:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: users-service
labels:
app: users-service
namespace: example
spec:
replicas: 1
selector:
matchLabels:
app: users-service
template:
metadata:
labels:
app: users-service
spec:
containers:
- name: users-service
image: users-service:latest
imagePullPolicy: Never
ports:
- containerPort: 8000
---
kind: Service
apiVersion: v1
metadata:
name: users-service
spec:
selector:
app: users-service
ports:
- protocol: TCP
port: 8000
更新
我跟随一个视频来设置NGINX-Controller + Ingress,在这里输入“ localhost / users”的结果不起作用,
描述女主持人:
(base) MacBook-Pro-2018-i9:microservices jordanbaucke$ kubectl describe ingress users-ingress
Name: users-ingress
Namespace: default
Address:
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends
---- ---- --------
*
/users users-service:8000 (10.1.0.75:8000)
Annotations: Events: <none>
用户服务:
(base) MacBook-Pro-2018-i9:microservices jordanbaucke$ kubectl describe svc users-service
Name: users-service
Namespace: default
Labels: <none>
Annotations: Selector: app=users-service
Type: ClusterIP
IP: 10.100.213.229
Port: <unset> 8000/TCP
TargetPort: 8000/TCP
Endpoints: 10.1.0.75:8000
Session Affinity: None
Events: <none>
nginx-inress
(base) MacBook-Pro-2018-i9:microservices jordanbaucke$ kubectl describe svc nginx-ingress
Name: nginx-ingress
Namespace: default
Labels: <none>
Annotations: Selector: name=nginx-ingress
Type: NodePort
IP: 10.106.167.181
LoadBalancer Ingress: localhost
Port: http 80/TCP
TargetPort: 80/TCP
NodePort: http 32710/TCP
Endpoints: 10.1.0.74:80
Port: https 443/TCP
TargetPort: 443/TCP
NodePort: https 32240/TCP
Endpoints: 10.1.0.74:443
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
现在当我尝试输入NodeIP:NodePort/users
的组合时,它无法连接吗?
从我的nginx-ingress
窗格中致电:
curl 10.1.0.75:8000
或curl 10.100.213.229:8000
返回结果。
答案 0 :(得分:4)
为了使nginx或任何其他入口正常工作:
因此,在这种情况下,由于使用了docker桌面,因此负载平衡器类型的service(ingress-nginx)公开nginx入口控制器将不起作用。这必须是NodePort类型。完成后,可以通过NodeIP:NodePort/users
和NodeIP:NodePort/content
访问工作负载窗格。 NodeIP:NodePort
也应提供nginx主页。