java系统找不到指定文件怎么解决
297
2022-09-11
Cloudify 学习(五):通过Cloudify的蓝图创建一个deployment, 并通过k8s的NodePort暴露服务
Cloudify4.5.0和Kubernetes1.13.0进行混合容器编排demo,并通过NodePort暴露服务
Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress
NodePort、LoadBalancer和Ingress都是将集群外部流量导入到集群内的方式。
Cloudify创建Blueprints,并执行创建根据Cloudify的Blueprints,创建deployment
Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress
Kubernetes 暴露服务的方式目前只有三种:LoadBlancer Service、NodePort Service、Ingress
NodePort、LoadBalancer和Ingress都是将集群外部流量导入到集群内的方式。
ClusterIP 服务是 Kubernetes 的默认服务。它给你一个集群内的服务,集群内的其它应用都可以访问该服务。集群外部无法访问它
#Port:k8s集群内部服务之间访问service的入口。即clusterIP:port是service暴露在clusterIP上的端口。mysql容器暴露了3306端口(参考DockerFile),集群内其他容器通过33306端口访问mysql服务,但是外部流量不能访问mysql服务,因为mysql服务没有配置NodePort
如果从Internet 没法访问 ClusterIP 服务,所以可以通过 Kubernetes 的 proxy 模式来访问该服务
启动 Kubernetes proxy 模式:$ kubectl proxy --port=8080 这样你可以通过Kubernetes API,使用如下模式来访问这个服务:要访问我们上面定义的服务,你可以使用如下地址:服务是引导外部流量到你的服务的最原始方式。NodePort,即在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。eg: 外部用户要访问k8s集群中的一个Web应用,那么我们可以配置对应service的type=NodePort,nodePort=30001。其他用户就可以通过浏览器服务是暴露服务到 internet 的标准方式。在 GKE 上,这种方式会启动一个 Network Load Balancer[2],它将给你一个单独的 IP 地址,转发所有流量到你的服务
5.Ingress
#Ingress:Ingress 事实上不是一种服务类型。相反,它处于多个服务的前端,扮演着“智能路由”或者集群入口的角色。你可以用 Ingress 来做许多不同的事情,各种不同类型的 Ingress 控制器也有不同的能力.Ingress由两部分组成:Ingress Controller 和 Ingress 服务。 ingress控制器有两种:nginx和haproxyIngress Contronler 通过与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段 Nginx 配置,再写到 Nginx-ingress-control的 Pod 里,这个 Ingress Contronler 的pod里面运行着一个nginx服务, 控制器会把生成的nginx配置写入/etc/nginx.conf文件中,然后 reload 一下 使用配置生效.
Cloudify创建Blueprints,并执行创建
1.创建蓝图展示:tomcat8-cst-nodePort
tomcat8-cst-nodePort.yml的内容
tosca_definitions_version: cloudify_dsl_1_3imports: - ' - 'plugin:cloudify-kubernetes-plugin'inputs: kubernetes_master_configuration: default: apiVersion: v1 kind: Config preferences: {} current-context: kubernetes-admin@kubernetes clusters: - name: kubernetes cluster: certificate-authority-data: get_secret: kubernetes_cloud_certificate_authority_data server: concat: - ' - get_secret: kubernetes_cloud_master_ip - ':' - get_secret: kubernetes_master_port contexts: - name: kubernetes-admin@kubernetes context: cluster: kubernetes user: kubernetes-admin users: - name: kubernetes-admin user: client-certificate-data: get_secret: kubernetes-admin_cloud_client_certificate_data client-key-data: get_secret: kubernetes-admin_cloud_client_key_datanode_templates: kubernetes_master: type: cloudify.kubernetes.nodes.Master properties: configuration: file_content: get_input: kubernetes_master_configuration relationships: [] App_deployment: type: cloudify.kubernetes.resources.Deployment properties: definition: apiVersion: extensions/v1beta1 kind: Deployment metadata: name: container-demo labels: app: app-name-demo version: v1 spec: selector: matchLabels: app: app-name-demo version: v1 replicas: 1 template: metadata: labels: app: app-name-demo version: v1 spec: containers: - name: container-name-demo image: '10.10.31.205/szy/tomcat8-5-cst:latest' ports: - containerPort: 8080 relationships: - type: cloudify.kubernetes.relationships.managed_by_master target: kubernetes_master App_service: type: cloudify.kubernetes.resources.Service properties: definition: apiVersion: v1 kind: Service metadata: name: container-demo spec: ports: - port: 80 targetPort: 8080 nodePort: 30001 selector: app: app-name-demo type: NodePort relationships: - type: cloudify.kubernetes.relationships.managed_by_master target: kubernetes_master
有几点需要注意:
1.k8s的配置变量,引用要正确,例如: kubernetes-admin_cloud_client_certificate_data
2.Deployment 的name,重复创建deployment,它名字每次要不一样的,后面会提取成变量。
3.镜像要配置成自己的或者公网的:image: ‘10.10.31.205/szy/tomcat8-5-cst:latest’
4.Tomcat的默认containerPort: 8080
5.App_service的名字,创建一个deployment可以,创建第二个尽是修改名字。
6.port、targetPort、nodePort、type: NodePort的配置,是后面访问服务的关键。
根据Cloudify的Blueprints,创建deployment
1.选择刚才自己创建的蓝图:tomcat8-cst-nodePort
2.Deploy完成后,我们再执行install的操作
创建成功后,可以在Kubernetes中的服务中看到,我们刚才创建的服务,并拿到30001端口
通过Kubernetes通过type:NodePort方式,将内部服务暴露,可以直接通过ip+端口 访问:
eg:完成!
参考资料: http://blog./newfly/2060587
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~