你能帮我吗?我想为节点端口部署Ingres。但我不知道这是否可能?
我试图在Google中找到一些信息,但是我获得了用于负载平衡的Ingress或一些困难的示例(例如在轨道上的Ingress Ruby等)。
答案 0 :(得分:2)
我将在下面尝试提供最简单的示例。在我的示例中,将使用nginxdemos/hello
码头工人形象。在本地这是这样的:
$docker run -p 80:80 -d nginxdemos/hello
...
$curl -I http://localhost
HTTP/1.1 200 OK
Server: nginx/1.13.8
Date: Tue, 08 Oct 2019 06:14:52 GMT
Content-Type: text/html
Connection: keep-alive
Expires: Tue, 08 Oct 2019 06:14:51 GMT
Cache-Control: no-cache
很酷。这是我们的后端部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-backend
namespace: java2days
spec:
replicas: 2
selector:
matchLabels:
app: nginx-server
template:
metadata:
labels:
app: nginx-server
spec:
containers:
- name: nginx-server
image: nginxdemos/hello
ports:
- containerPort: 80
name: server-port
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15
periodSeconds: 15
timeoutSeconds: 3
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15
periodSeconds: 15
timeoutSeconds: 3
不久,我们将有2个nginx服务器的副本。在云中某处的节点上启动并运行:
$kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-backend-dfcdb9797-dnx7x 1/1 Running 0 21m
nginx-backend-dfcdb9797-pnrhn 1/1 Running 0 21m
让我们现在创建一个NodePort服务。这是服务yaml:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: java2days
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
name: http
selector:
app: nginx-server
type: NodePort
请注意选择器,它与后端服务匹配。现在该到入口控制器了。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
namespace: java2days
spec:
rules:
- http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
path: /*
您将需要等待大约5-10分钟,直到GCloud为该Ingress设置IP地址。终于完成了,就像这样:
$kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
nginx-ingress * x.y.z.p 80 15m
现在从本地计算机上
$curl -I http://x.y.z.p
HTTP/1.1 200 OK
很好,它正在工作。如果您在浏览器中将其打开并刷新多次,则会看到服务器ID更改并且负载平衡正常工作。阅读的附加入口点-here。
完成实验后,别忘了清理资源。
答案 1 :(得分:0)
入口背后的想法是,您需要使用入口控制器,如何公开入口控制器完全取决于您,就像您使用Kubernetes服务来公开它一样,例如,如果要在节点端口上使用入口您的结构类似于:
service exposing nodeport ==> ingress controller ==> web app service (via ingress) ==> web app
这是一般流程,因为无论如何公开入口控制器(LoadBalancer,NodePort等),路由通常基于主机名,即如果我的NodePort在172.64.0.25:30965中公开,那么我会将我的域指向该IP,并根据与之路由的主机进行入口路由。 here上有很多文档(这是针对Nginx入口控制器的,但是所有入口路由都非常相似)