首页 > 其他分享 >如何通过kube-apiserver访问K8s集群中的App

如何通过kube-apiserver访问K8s集群中的App

时间:2024-01-12 18:34:01浏览次数:36  
标签:name nginx default App apiserver 访问 api kube

本文分享自华为云社区《通过kube-apiserver访问K8s集群中的App》,作者: tsjsdbd。

K8s集群中的App(或者svc),通常使用ClusterIP,NodePort,Loadbalancer这些方式访问,但是你也可以通过Kube-apiserver(管理面)来访问App。

在《跟唐老师学习云网络 - Kubernetes网络实现》里面,提到K8s集群里面的容器,有几种访问方法:

LoadBalancer

Ingress

ClusterIP

NodePort

这里就不再分析,直接看如何通过Kube-apiserver来访问容器里面的App。下图(5)

如何通过kube-apiserver访问K8s集群中的App_K8s集群

 

一、启动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。

 点击关注,第一时间了解华为云新鲜技术~

标签:name,nginx,default,App,apiserver,访问,api,kube
From: https://blog.51cto.com/u_15214399/9220340

相关文章

  • RetsCloud AppLink适用的场景有哪些?​
    Applink是什么产品?AppLink是一款由RestCloud公司推出的超级应用连接器。无需开发,零代码,即可快速打通应用系统之间的数据。通过流程搭建,可以智能、高效地完成自动化任务,在大大提高工作效率的同时,也降低了大量的人工成本。目前RestCloudApplink提供数百款应用,超过8000个接口动作及其......
  • 众筹系统开发丨DAPP智能合约泰山众筹系统开发功能逻辑及详细模板
    什么是DAPP根据DavidJohnston在文章DavidJohnstonCEO/DecentralizedApplications里的定义,只有当满足以下所有条件时,一个应用才可以称之为DAPP。应用必须完全开源、自治并且没有一个实体控制着该应用的大部分代币(Token)。该应用必须能够根据市场的反馈及技术要求进行升级,......
  • DAPP秒合约交易智能机器人系统功能开发案例
     基于区块链技术的自动化交易程序,旨在通过使用智能合约执行快速的交易操作,并以秒级响应时间进行高效的交易执行。将介绍ADA秒合约智能机器人的原理和实现,并提供相应的编程。event TradeExecuted(uint256 tradeId, string tradeType, uint256 tradeAmount, uint256 tradePr......
  • 抖音APP如何实现用户生命周期提升
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群近日,在火山引擎数智平台在北京举办的“超话数据:企业产品优化分享”的活动上,抖音策略产品经理分享了抖音产品提升用户生命周期的难点及解决办法。他提到,抖音产品优化涉及到性能、交互、内容和业务......
  • Gradio:快速构建你的webApp
    1.什么是Gradio如果你了解web开发,一定会知道开发一款webApp需要涉及很多技术栈:前端:HTML+CSS+JS(可能会涉及不同的CSS框架和JS框架如jqueryVUEreact等)后端语言:如python/javaweb容器:如flask/tomcat如果你只会python,又不想重头学习上述技术,你要怎么办?据我所知,有两种解决方案:s......
  • KubeSphere实现金丝雀发布(Canary Release)
    0前言KubeSphere基于[Istio]向用户提供金丝雀发布功能,即:引入服务的新版本,并向其发送一小部分流量来进行测试同时,旧版本负责处理其余的流量如果一切顺利,就可逐渐增加向新版本发送的流量,同时逐步停用旧版本如出现任何问题,可用KubeSphere更改流量比例来回滚至先前版本该......
  • KubeSphere实现金丝雀发布(Canary Release)
    0前言KubeSphere基于[Istio]向用户提供金丝雀发布功能,即:引入服务的新版本,并向其发送一小部分流量来进行测试同时,旧版本负责处理其余的流量如果一切顺利,就可逐渐增加向新版本发送的流量,同时逐步停用旧版本如出现任何问题,可用KubeSphere更改流量比例来回滚至先前版本......
  • Kubernetes 资源强制删除方法总结
    本文适用于K8s及K8s为核心的所有集群。引言在使用K8s时,有时候会遇到资源无法删除问题,就需要一些强制删除的手段。注:强制删除不应随意使用,尤其是在生产环境。注:本文只注重暴力美学,不对任何强制删除导致的后果负责。警告:以下操作均可能会导致数据丢失或集群崩溃,请勿在生产环境尝......
  • 当创建一个service后,kubernetes会发生什么?
    本文分享自华为云社区《当创建一个service后,kubernetes会发生什么?》,作者:可以交个朋友。一、Service介绍1.1Kubernetes为什么会引入service?考虑到集群中Pod实例IP地址随着工作负载的生命周期的变化,常规通过访问Pod实例的IP方法变得不再实用。每个工作负载通常有一个或者更多个后端......
  • 创建service后,kubernetes会发生什么
    本文分享自华为云社区《当创建一个service后,kubernetes会发生什么?》,作者:可以交个朋友。一、Service介绍1.1Kubernetes为什么会引入service?考虑到集群中Pod实例IP地址随着工作负载的生命周期的变化,常规通过访问Pod实例的IP方法变得不再实用。每个工作负载通常有一个或者更多......