如何通过kube-apiserver访问K8s集群中的App
本文分享自华为云社区《通过kube-apiserver访问K8s集群中的App》,作者: tsjsdbd。
K8s集群中的App(或者svc),通常使用ClusterIP,NodePort,Loadbalancer这些方式访问,但是你也可以通过Kube-apiserver(管理面)来访问App。
在《跟唐老师学习云网络 - Kubernetes网络实现》里面,提到K8s集群里面的容器,有几种访问方法:
- LoadBalancer
- Ingress
- ClusterIP
- NodePort
这里就不再分析,直接看如何通过Kube-apiserver来访问容器里面的App。下图(5)
一、启动App
创建文件ng-dp.yaml,内容如下:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:stable-perl ports: - containerPort: 80
执行命令:
kubectl apply -f ng-dp.yaml
这样会启动一个nginx容器,并在容器里面监听80端口。
二、设置svc访问
创建文件ng-svc.yaml,内容如下:
apiVersion: v1 kind: Service metadata: name: my-nginx spec: ports: - port: 80 protocol: TCP selector: app: nginx
执行命令:
kubectl apply -f ng-svc.yaml
这样就会为App开启集群内可访问的svc通道。
kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.247.0.1 <none> 443/TCP 7d my-nginx ClusterIP 10.247.124.234 <none> 80/TCP 4h4m
有了svc后,我们就可以通过Kube-apiserver访问该App了。
三、访问App
查询Kube-apiserver的地址:
kubectl cluster-info Kubernetes control plane is running at https://192.168.0.116:5443 CoreDNS is running at https://192.168.0.116:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
1)通过token方式访问:
查询sa(service-account)
kubectl get sa NAME SECRETS AGE default 1 7d
然后查询sa内容
kubectl describe sa default Name: default Namespace: default Mountable secrets: default-token-vztbc Tokens: default-token-vztbc
接着查询secret内容,获得token值。
kubectl describe secret default-token-vztbc Name: default-token-vztbc Namespace: default Type: kubernetes.io/service-account-token ==== token: eyJhbGciOiJSUzI1NiIsImtpZCI6InJlRWUxSFpvektO <== 取这个内容
设置env后,就可以访问App了
export TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6InJlRWUxSFpvektO curl --noproxy '*' -kv -H "Authorization: Bearer $TOKEN" \ https://192.168.0.116:5443/api/v1/namespaces/default/services/http:my-nginx:80/proxy/
如果权限不够,说明要提高sa的权限,比如:
kubectl create clusterrolebinding sa-tsj --clusterrole=cluster-admin --serviceaccount=default:default
2)通过证书方式访问:
除了获取token,也可以直接配置证书方式来访问。我们从kubeconfig文件里面,取出对应的证书。
grep -A1 'client-certificate-data: ' /root/.kube/config | tail -n 1 | sed 's/ *//' | base64 -d >cert.pem grep -A1 'client-key-data: ' /root/.kube/config | tail -n 1 | sed 's/ *//' | base64 -d >key.pem grep -A1 'certificate-authority-data: ' /root/.kube/config | tail -n 1 | sed 's/ *//' | base64 -d >ca.pem
然后,配置证书后访问:
curl --noproxy '*' -kv --cacert ./ca.pem --key ./key.pem --cert ./cert.pem \ https://192.168.0.116:5443/api/v1/namespaces/default/services/http:my-nginx:80/proxy/
四、URL格式说明
Kube-apiserver提供代理URL格式如下:
http://api_addr/api/v1/namespaces/namespace_name/services/service_name/proxy
其中,你可以将App的url后缀,parameter参数等附加到尾部。如:
http://api_addr/api/v1/namespaces/namespace_name/services/service_name[:port_name]/proxy
如果没有指定「端口名」,也可以使用「端口号」,如:
http://api_addr/api/v1/namespaces/namespace_name/services/service_name[:port_num]/proxy
反正不管有没有指定「端口名」,用「端口号」肯定是可以的。
默认情况, Kube-apiserver是使用http来访问你的App,如果要使用https的话,则要指定,如下:
http://api_addr/api/v1/namespaces/namespace_name/services/https:service_name:[port_name]/proxy
所有支持的proxy的URL格式总结如下:
<service_name> - 使用http访问默认的端口
<service_name>:<port_name> - 使用http访问指定的端口
<service_name>:<port_number> - 使用http访问指定的端口
https:<service_name>: - 使用https访问默认的端口(注意有个冒号)
https:<service_name>:<port_name> - 使用https访问指定的端口
五、有什么用?
很多时候,K8s集群里面App的访问,都是只能通过「数据面」访问(无论是ClusterIP,NodePort,Ingress等),比如要从互联网访问,就得靠绑定EIP来完成。但是如果「管理面」也能访问到App的话,我们就可以设计一种“代理模式”,通过复用管理面通道,提供App的默认访问能力。这样你的用户,不用额外绑定EIP也能访问他的App。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
GaussDB(for MySQL) RegionlessDB发布:全球数据库技术
本文分享自华为云社区《GaussDB(for MySQL) RegionlessDB发布:全球数据库技术》,作者: GaussDB 数据库。 1.技术背景 对于一些典型行业,如跨境电商和大型互联网企业,其业务往往遍及世界各地。在当今中资出海的浪潮下,客户业务全球化部署诉求对传统的数据库部署形态提出了挑战。 过去客户主要选择的解决方案有两类:第一类,数据库中心化部署一套,应用端统一接入;第二类,数据库随应用全球部署,通过同步工具完成各区域间数据同步。对于前者,异地读写数据库的时延不甚理想;对于后者,数据状态一致性难以保障,整体链路成本也偏高。 针对传统解决方案的弊端,同时结合客户的诉求,华为云GaussDB(for MySQL)团队预见性地提出未来云原生数据库的部署形态将从以资源、地域为中心转变为以应用、流量为中心这一理念。基于此,GaussDB(for MySQL) RegionlessDB形态应运而生。 GaussDB(for MySQL) RegionlessDB,是由分布在全球多个地域间若干GaussDB(for MySQL)集群组成的数据库网络。其中,主集群对外提供写服务,每个...
- 下一篇
Prometheus配置Basic Auth进行安全防护,实现登录控制
本文分享自华为云社区《Prometheus配置Basic Auth进行安全防护,实现登录控制》,作者:可以交个朋友。 一、Prometheus Basic Auth 使用背景 在日常prometheus的使用中是没有安全加密措施的,可能会导致监控信息,敏感信息遭遇泄漏。在这种情况下需要保护对Prometheus的访问。 二、方案简介 Prometheus于2.24版本(包括2.24)之后提供Basic Auth功能进行加密访问,在浏览器登录UI的时候需要输入用户密码,访问Prometheus api的时候也需要加上用户密码。 大致步骤如下 预制用户密码,其中密码使用python3工具包加密 创建对应用户密码配置文件,修改普罗启动命令(operator场景通过ngress-nginx方式) 由于Prometheus访问需要认证,如果普罗负载存在探针则修改普罗负载本身的探针配置 由于Prometheus访问需要认证,如果有grafana,需要修改grafana相关步骤 三、准备工作,预制用户密码,其中密码使用python3工具包加密 因为Basic Auth 需要user、password...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7