Kubernetes 服务架构
Kubernetes Services Architecture
我正在尝试通过配置文件让 NGINX 将流量直接连接到我的应用程序的不同部分,但我终究无法弄明白。这是我当前的设置:
http-service (loadbalancer)
NGINX (port 80)
website-service (10.27.246.107, port 8000, targetPort 8000, selector 'run: website')
website (label 'run: website', containerPort 8000)
NGINX Conf
upstream website{
server 10.27.246.107:8000
}
这是一个正常的 nginx pod,目前使用 containerPort 80。
我这样做正确吗?
将流量路由到应用程序不同部分的最佳方法是使用 Ingress。在 Ingress 中,您可以描述进入应用程序所有部分的所有路径。它看起来像:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
backend:
serviceName: website1
servicePort: 80
- path: /bar
backend:
serviceName: website2
servicePort: 3368
其实Ingress-controller是基于Nginx的,不过你也可以选择其他引擎,比如HAproxy。
Ingress 是为在 Kubernetes 中使用而设计的,它在 Kubernetes 中具有更多的特性。比如你的网站上游在Kubernetes中应该描述为一个服务:
kind: Service
apiVersion: v1
metadata:
name: website1
spec:
selector:
app: python-web-site
ports:
- protocol: TCP
port: 80
targetPort: 8080
无论如何,您可以通过 Nginx 路由流量并将其公开,但最佳做法是在 Kubernetes 中使用 Ingress。
我正在尝试通过配置文件让 NGINX 将流量直接连接到我的应用程序的不同部分,但我终究无法弄明白。这是我当前的设置:
http-service (loadbalancer)
NGINX (port 80)
website-service (10.27.246.107, port 8000, targetPort 8000, selector 'run: website')
website (label 'run: website', containerPort 8000)
NGINX Conf
upstream website{
server 10.27.246.107:8000
}
这是一个正常的 nginx pod,目前使用 containerPort 80。
我这样做正确吗?
将流量路由到应用程序不同部分的最佳方法是使用 Ingress。在 Ingress 中,您可以描述进入应用程序所有部分的所有路径。它看起来像:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
backend:
serviceName: website1
servicePort: 80
- path: /bar
backend:
serviceName: website2
servicePort: 3368
其实Ingress-controller是基于Nginx的,不过你也可以选择其他引擎,比如HAproxy。 Ingress 是为在 Kubernetes 中使用而设计的,它在 Kubernetes 中具有更多的特性。比如你的网站上游在Kubernetes中应该描述为一个服务:
kind: Service
apiVersion: v1
metadata:
name: website1
spec:
selector:
app: python-web-site
ports:
- protocol: TCP
port: 80
targetPort: 8080
无论如何,您可以通过 Nginx 路由流量并将其公开,但最佳做法是在 Kubernetes 中使用 Ingress。