前言:
今天同学们对“nginx 多域名 多ip”大概比较着重,大家都需要分析一些“nginx 多域名 多ip”的相关文章。那么小编同时在网摘上搜集了一些关于“nginx 多域名 多ip””的相关知识,希望小伙伴们能喜欢,大家一起来学习一下吧!#挑战30天在头条写日记#
k8s发布应用的两种方式:
kubernetes-dashboardkubectl命令行一、Dashboard方式
配置部署:包含应用名称、容器镒、pod数量、Service非常的方便,不想设置配置yaml的可以很方便的部署。
点击部署就成功了k8s应用的部署了。部署后可以看到相应的deployment、pod、service等状态和信息。
DeploymentPodService监控二、命令行方式1、创建namespace
vim nginx-namespace.yaml
apiVersion: v1 #类型为Namespacekind: Namespace #类型为Namespacemetadata: name: ns-test #命名空间名称 labels: name: label-test #pod标签
执行
#创建kubectl create -f nginx-namespace.yaml#查询kubectl get namespace2、创建pod
一般不直接create pod,而是通过controller来创建pod。deployment为其中一种controller
vim nginx-deployment.yaml
apiVersion: apps/v1kind: Deploymentmetadata: namespace: ns-test name: nginx-deploymentspec: selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:alpine ports: - containerPort: 80
执行
#创建kubectl create -f nginx-deployment.yaml#查询。查询时需要等待一会,此时会下载镜像需要时间kubectl get deployment -n ns-test#或kubectl get pods -n ns-test
可以看到"replicas: 3",所以有3个pod并且每个pod只有一个容器。都正常启动。
接下来看看如何访问,查看访问的端口:
kubectl get pods -o wide -n ns-test #-o wide 展开的意思
这时已经可以访问了,就是通过虚拟ip来端口
curl 10.244.1.43
curl 10.244.1.44
curl 10.244.1.45
如下图,只要集群范围内的机器就可以直接通过IP访问了
那问题来了,这么多虚拟ip,每次pod重建还会重新生成,那怎么办呢???
看下面的servcie
3、创建service
vim nginx-service.yaml
apiVersion: v1kind: Servicemetadata: namespace: ns-test name: nginx-servicespec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80
执行
kubectl apply -f nginx-service.yamlkubectl get svc nginx-service -o wide -n ns-test
可以看到有一个cluster-ip,通过这个端口+端口就可以负载到之前3个节点的nginx了
当然cluster-ip也只能在集群内的机器访问。再结合nginx或域名就可以向外提供负载均衡访问了。
可以看到cluster-ip虽然有负载均衡的功能但还是不能外网访问k8s部署的应用,那如何才能直接外网能访问k8s部署的应用呢?
设置service为nodeport方式,如下:
apiVersion: v1kind: Servicemetadata: namespace: ns-test name: nginx-servicespec: selector: app: nginx ports: - nodePort: 30000 protocol: TCP port: 80 targetPort: 80 type: NodePort
其中type: NodePort另外想指定端口也可以加上nodePort: 30000。这样就可以通过主机ip+nodePort的访问k8s部署的应用了。
执行
kubectl apply -f nginx-service.yamlkubectl get svc nginx-service -o wide -n ns-test
可以看到我使用的是我主机的ip+nodePort可以直接访问到nginx了。
三、补充知识1、Service
Kubernetes 服务有四种类型:ClusterIP、NodePort、LoadBalancer 和ExternalName。服务spec中的type 属性决定了服务如何暴露给网络。
ClusterIP 类型的服务将在集群内部暴露,并分配一个 cluster IP 地址。Pod 可以通过这个 IP 地址来访问该服务。ClusterIP 类型的服务适用于需要在集群内部访问的服务,例如数据库服务。NodePort 类型的服务将在每个节点上暴露一个端口,并分配一个 cluster IP 地址。外部客户端可以通过 <NodeIP>:<NodePort> 来访问该服务。NodePort 类型的服务适用于需要在集群外部访问的服务,例如 Web 服务。LoadBalancer 类型的服务将使用集群外部的负载均衡器来暴露服务。外部客户端可以通过负载均衡器的 IP 地址来访问该服务。LoadBalancer 类型的服务适用于需要在集群外部访问的服务,并且需要高可用性的服务。一般LoadBalancer是付费提供的。ExternalName 类型的服务将将服务指向一个外部主机或域名。Pod 可以通过该主机或域名来访问该服务。ExternalName 类型的服务适用于需要访问外部服务的场景。
标签: #nginx 多域名 多ip