我想在kubernetes上运行两个应用程序,我想知道我是否可以使用nginx ingress控制器运行两个子域。
例如:app1.localhost:8181/cxf
和app2.localhost:8181/cxf
每一个都有不同的服务。
我该怎么做?
这里有更多的上下文:
编辑:
注意:mysql运行良好,所以我没有在这里发布yaml,所以它不会太长。
还要注意,我使用karaf和kar。(那将是我的应用程序(
我在想,也许我应该有2个节点?一个是mysql和app1,另一个是mysql和app2?因此在一个app1.localhost/cxf
服务中我可以访问,而在另一个app2.localhost/cxf
服务中。。。也许没什么意义。。。我读到我需要kubeadm,但没有办法把它安装在窗户上。我想我必须用迷你kube代替吗?
这些是我的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>
,直到我删除第一个。
这是有道理的,因为如果我有两个副本(如果是app1(和两个副本,那么每个应用都应该有一个loadBalancer,对吧?
注意,我也使用helm安装了nginxingress控制器,因为ingress资源在其他情况下不会工作,至少我读到了这一点。
通过安装它,它也安装了nginx负载均衡器,而这个并没有挂起。我需要使用nginxloadBalancer吗?或者我可以删除它并使用kubernetes类型的loadBalancer吗?
胡姆,我在这里错过了什么。。。
谢谢你抽出时间!
我想在kubernetes上运行两个应用程序,我想知道我是否可以使用nginx ingress控制器运行两个子域。
是的,您只需要任意数量的指向Ingress控制器IP的DNS记录(您使用了127.0.0.1,所以我将在这些示例中使用它,但您可以替换任何相关的IP(。这就是Ingress资源的全部意义:使用host:
标头将请求调度到集群
我找到了一个通配符DNS提供商的列表,我确认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