[英]kubernetes-how to subdomain localhost using nginx ingress controller?
我想在 kubernetes 上运行 2 个应用程序,我想知道是否可以使用 nginx 入口控制器做 2 个子域。
例如: app1.localhost:8181/cxf
和app2.localhost:8181/cxf
每一个都有不同的服务。
我怎样才能做到这一点?
这里有更多的上下文:
编辑:
注意:mysql 工作正常,所以我不会在这里发布 yaml,所以它不会太长。
还要注意,我使用带有 kar 的 karaf。(那将是我的应用程序)
我在想也许我应该有 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
应用程序1:
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版本app1.localhost:8181/cxf
,和App2版本app2.localhost:8181/cxf
我还有另一个疑问,难道我不能创建另一个负载均衡器吗? 我想,所以选择器将是该 loadBalancer 中的 app2,但由于我已经有了一个,新的只是保持<pending>
直到我删除第一个。
这是有道理的,因为如果我有 2 个副本,如果 app1 和 app2 的 2 个副本,那么每个应用程序都应该有一个负载均衡器,对吗?
请注意,我也使用 helm 安装了 nginx ingress-controller,因为否则 ingress-resource 将无法工作,至少这是我所读到的。
通过安装它,它也安装了 nginx 负载均衡器,而这个没有挂起。 我需要使用 nginx loadBalancer 吗? 或者我可以删除它并使用 kubernetes 类型的 loadBalancer 吗?
Huum,我在这里遗漏了一些东西......
谢谢你的时间!
我想在 kubernetes 上运行 2 个应用程序,我想知道是否可以使用 nginx 入口控制器做 2 个子域。
是的,您只需要指向 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.