应用程序部署管理
组织一个生态圈内的多个组件为一体,统一进行管理。
在linux上实现应用程序的部署会用到deb,rpm。在k8s上也有相同的实现方式。
k8s应用程序部署工具k8s的应用程序部署管理有两种解决方案:
k8s原生的应用程序部署管理工具kustomize: kustomize目前尚不成熟,但其能提供一种声明式应用管理的机制。 kustomize从k8s的v1.14版本左右出现。
第三方应用程序部署管理工具 helm : helm 本身特别类似于 deb 、 rpm 这些应用程序部署工具的前端工具apt和yum。apt和yum依赖于一个集中式的仓库来管理,helm依赖的底层工具包管工具是chart。
chart是一个复杂应用程序所需要依赖的所有配置清单的集合。chart也存在一个集中式的仓库Chart Hub。
Contour使用
coutour自身也是Ingress控制器,所以v1beta1和v1版本的ingress资源规范,在coutour上也能使用,只不过其kubernetes.io/ingress.class:为contour。
除了ingress之外,其还支持其独有的资源规范,是其通过CRD引入的,名字为httpproxies.projectcontour.io
12345# 查看api-resourcesroot@k8s-master01:~/yaml/chapter13# kubectl api-resources | grep "projectcontour"extensionservices extensionservice,extensionservices projectcontour.io/v1alpha1 true ExtensionServicehttpproxies proxy,proxies pro ...
Envoy部署
官网:https://projectcontour.io/
1.快速部署contour
1kubectl apply -f https://projectcontour.io/quickstart/contour.yaml
2.查看所部署的pod
1234567root@k8s-master01:~/yaml/chapter13# kubectl get pods -n projectcontour -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATEScontour-65b455dccf-bkfpw 1/1 Running 0 6m11s 192.168.30.23 k8s-node03 <none> <none>contour-65b455dccf-pqjzc 1/1 ...
Envoy简介
Ingress-nginx只是众多Ingress controller中的一种。如OpenShift是k8s里红帽的一个发行版,其默认使用的ingress controller是HAProxy。除了HAProxy外,还有Envoy等。。
Envoy由C++语言开发,功能非常强大。为动态环境而设计,支持XDS-API,支持动态加载配置信息。
基于Envoy的controller常见方法有Gloo,Contour。
Envoy代理核心逻辑组件
contour部署示意图
contour在每一个节点上以DaemonSet的方式部署了一个Envoy。在每一个节点上使用NodePort的local流量策略,将流量至发送给本地的Envoy。
对Envoy的访问就可以转为对Service下的某个Pod的访问。
我们要改变Envoy配置中的信息,只需要写一个ingress提交给k8s,k8s会发送给contour从而转换为Envoy所能识别的配置格式。
Ingress发布kubernetes dashboard
配置Ingress资源清单1.编写资源清单
12345678910111213141516171819[root@Computer02 script]# vim ingress-kubernetes-dashboard.yamlapiVersion: extensions/v1beta1kind: Ingressmetadata: name: dashboard annotations: kubernetes.io/ingress.class: "nginx" # 被nginx所解析的ingress资源 ingress.kubernetes.io/ssl-passthrough: "true" # 此处不是做http代理而是做TCP代理,由于dashboard是ssl会话,所以此处不做ssl卸载直接转给后端dashboard nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingres ...
Ingress发布kubernetes dashboard
在longhorn官网上存在longhorn的ingress部署清单可以直接使用
https://longhorn.io/docs/1.1.2/deploy/accessing-the-ui/longhorn-ingress/
longhorn的Dashboard默认没有进行认证,可以直接进行访问,这个做法是十分不安全的。所以需要对其进行一个basic认证
1.创建一个basic认证文件
1root@k8s-master01:~/yaml/chapter13# USER=Masuri; PASSWORD=123456; echo "${USER}:$(openssl passwd -stdin -apr1 <<< ${PASSWORD})" >> auth
2.创建一个secret
1root@k8s-master01:~/yaml/chapter13# kubectl -n longhorn-system create secret generic basic-auth --from-file ...
Ingress-nginx部署
官方部署文档:https://github.com/kubernetes/ingress-nginx/blob/main/docs/deploy/index.md
官方文档内提供了各种环境下的安装方式,由于当前使用的为虚拟机,所以使用bare-matel(裸机)的部署方式
1kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.48.1/deploy/static/provider/baremetal/deploy.yaml
需要注意的是,此配置清单中的镜像在k8s.gcr.io无法访问,此处两种做法:
预先下载好镜像和deploy.yaml文件,修改yaml文件中的镜像地址。
翻墙下载。
此处使用配置代理进行翻墙
Docker配置代理接口1.修改Docker,systemd文件
123456root@k8s-master01:~# vim /usr/lib/systemd/system/docker.service[Service] # servi ...
Ingress配置示例v1beta1
配置Ingress1.编写资源清单
12345678910111213141516171819202122232425262728293031323334root@k8s-master01:~/yaml/chapter13# vim ingress-v1beta1-demo.yamlapiVersion: extensions/v1beta1kind: Ingressmetadata: name: ingress-v1beta1-demo annotations: kubernetes.io/ingress.class: "nginx"spec: rules: - host: www.mylinuxops.com # 使用虚拟主机配置ingress http: paths: - path: backend: serviceName: demoapp servicePort: 80# - host: www.mylinuxops.cn# http:# ...
Ingress配置示例v1
配置Ingress1.编写资源清单
1234567891011121314151617181920212223root@k8s-master01:~/yaml/chapter13# vim ingress-demo-v1.yamlapiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: ingress-demo-v1 annotations: kubernetes.io/ingress.class: "nginx"spec: rules: - host: www.mylinuxops.cn http: paths: - path: / # 路径 pathType: Prefix # 路径类型,有3种Exact、Prefix和ImplementationSpecific backend: service: name: demoapp port: ...
Ingress
Ingress可以认为在k8s集群边缘统一打了一个洞,而后用户的请求在进入集群时统一从这个名为Ingress的洞口流入进来。
通过Ingress进入集群的流量如何将其发放到各自不同的后端服务上去?有以下几种方式:
基于不同虚拟主机来进行路由,将不同的服务发送到不同的pod上去。
基于同一个虚拟主机来路由,将后端的每一个服务映射为一个路径。
Ingress: k8s上的标准资源。
Ingress Controller: Ingress控制器。兼具http/tcp代理服务,如Nginx,HAProxy,Envoy。
Ingress是一个配置文件的片段可以存在多个,Ingress Controlle可以存在多个,但是启用的只有一个。
所以如果有服务需要暴露到集群外部,就需要使用Ingress为其定义一个适用于Ingress Controller的配置文件,然后让其自动能够注入到Ingress Controller中。
Ingress controllerIngress控制器是用来让ingress和代理服务进行适配的一个中间组件,这里的代理服务可以是Nginx,HAProxy,Envoy等 ...