我想在kubernetes上运行2个应用程序,我想知道我是否可以使用nginx入口控制器来做2个子域。
例如:app1.localhost:8181/cxf
和app2.localhost:8181/cxf
其中的每一项都会提供不同的服务。
我该怎么做?
这里还有更多上下文:
编辑:
注意:mysql运行正常,因此我不会在此处发布yaml,因此不会太长。
也请注意,我将karf与kar一起使用。(这将是我的应用程序)
我当时想也许我应该有2个节点?一个与mysql和app1,另一个与mysql和app2?因此,我可以访问app1.localhost/cxf
服务,而其他app2.localhost/cxf
服务……可能并没有多大意义……而且我读到我需要为此而使用kubeadm,而且没有在Windows上安装它的方法。我想我必须为此使用minikube吗?
这些是我的yaml:
负载均衡器:
apiVersion: v1
kind: Service
metadata:
name: lb-service
spec:
type: LoadBalancer
selector:
app: app1
ports:
- protocol: TCP
name: app1
port: 3306
targetPort: 3306
- protocol: TCP
name: app1-8080
port: 8080
targetPort: 8080
- protocol: TCP
name: app1-8101
port: 8101
targetPort: 8101
- protocol: TCP
name: app1-8181
port: 8181
targetPort: 8181
status:
loadBalancer:
ingress:
- hostname: localhost
app1
:apiVersion: v1
kind: Service
metadata:
name: app1-service
spec:
ports:
- port: 8101
selector:
app: app1
clusterIP: None
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: app1-deployment
spec:
selector:
matchLabels:
app: app1
replicas: 1
template:
metadata:
labels:
app: app1
spec:
containers:
- name: app1
image: app1:latest
app2 :与app1相同,但版本不同(旧服务)
入口资源:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: apps-ingress
#annotations:
#nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: app1.localhost # tried app1.127-0-0-1.sslip.io ass answered below too.
http:
paths:
- path: /
backend:
serviceName: app1-service
servicePort: 8181
- host: app2.localhost
http:
paths:
- path: /
backend:
serviceName: app2-service
servicePort: 8181
我应该能够访问app1.localhost:8181/cxf
中的app1版本和app2.localhost:8181/cxf
中的app2版本
我还有另一个疑问,我是否应该能够创建另一个loadBalancer?我想要,所以选择器将在该loadBalancer中为app2,但是由于我已经有一个选择器,因此新选择器将停留在<pending>
直到删除第一个选择器。
那将是有道理的,因为如果我有2个副本(如果app1)和2个app2副本,那么每个应用程序都应该有一个loadBalancer吗?
请注意,我也使用头盔安装了nginx入口控制器,因为入口资源否则无法正常工作,至少那是我所读的内容。
通过安装它,它也安装了nginx负载平衡器,而该平衡器没有挂起。我需要使用Nginx loadBalancer吗?还是可以删除它并使用kubernetes类型的loadBalancer?
Huum,我在这里错过了一些东西...
感谢您的时间!
答案 0 :(得分:2)
我想在kubernetes上运行2个应用程序,我想知道我是否可以使用nginx入口控制器来做2个子域。
是的,您只需要任何数量的指向Ingress控制器IP的DNS记录(您使用的是127.0.0.1,因此我将在这些示例中使用它,但是您可以替换任何相关的IP)。这就是Ingress资源的重点:使用host:
标头将请求分派到集群中
我发现a list of wildcard DNS providers,其中我确认app1.127-0-0-1.sslip.io
和app2.127-0-0-1.sslip.io
符合预期
因此:
kind: Ingress
metadata:
name: app1-and-2
spec:
rules:
- host: app1.127-0-0-1.sslip.io
http:
paths:
- path: /
backend:
serviceName: app1-backend
servicePort: 8181 # <-- or whatever your Service port is
# then you can repeat that for as many hosts as you wish
- host: app2.127-0-0-1.sslip.io
http:
paths:
- path: /
backend:
serviceName: app2-backend
servicePort: 8181