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

这篇具有很好参考价值的文章主要介绍了通过kube-apiserver访问K8s集群中的App。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

通过kube-apiserver访问K8s集群中的App,kubernetes,容器,云原生

一、启动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。文章来源地址https://www.toymoban.com/news/detail-805892.html

到了这里,关于通过kube-apiserver访问K8s集群中的App的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过keepalived+nginx实现 k8s apiserver节点高可用

    K8s 主机配置: 配置: 4Gib 内存/4vCPU/60G 硬盘 网络:机器相互可以通信 k8s 实验环境网络规划: podSubnet(pod 网段) 10.244.0.0/16 serviceSubnet(service 网段): 10.96.0.0/12 物理机网段:192.168.1.0/24 2个控制节点2个工作节点 K8S集群角色 IP地址 主机名 安装的组件 控制节点 192.168.1.63 xueg

    2024年02月03日
    浏览(27)
  • k8s mysql集群 & 分布式锁 & apiserver & etcd 的关系

    在 Kubernetes (k8s) 中,MySQL 集群可以使用分布式锁来确保在多个实例之间对共享资源的互斥访问。这是通过结合 Kubernetes API Server 和 etcd 来实现的。 Kubernetes API Server 是 k8s 集群中的核心组件之一,它充当了集群的控制平面,提供了对集群资源的管理和操作接口。API Server 是一个

    2024年02月07日
    浏览(39)
  • 通过curl访问k8s集群获取证书或token的方式

    K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件。 1. Authentication(认证) 2. Authorization(授权) 3. Admission Control(准入控制) 客户端(kubectl或curl等)要想访问K8s集群API Server,一般需要证书、Token或者用户名+密码。如果

    2024年01月24日
    浏览(32)
  • 如何通过port-forward命令在本地访问 k8s 集群服务

    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享 在我们访问k8s中的pod服务时,一般通过node port映射pod端口进行访问,还有一种是通过ingress或者istio通过域名方式来访问,虽然两种方式能满足我们需求,但是如果针对临时访问,配置起来还是

    2024年02月04日
    浏览(41)
  • 【K8S】外部访问请求原理流程(service、kube-proxy、pod的关系)

    用户发起请求,请求传送到Ingress Ingress :作用是定义请求如何转发到service的规则,ingress支持7层代理转发,它可以通过根据不同的域名或者URL访问路径把请求流量转发到不同的service上,实现调度不同业务域、不同URL访问路径的业务流量。 Service: 提供了服务的负载均衡和反向代

    2024年01月17日
    浏览(40)
  • k8s之apiserver

    1、Kube-APIServer 启动 APIServer 启动采用 Cobra 命令行,解析相关 flags 参数,经过 Complete(填充默认值)-Validate(校验) 逻辑后,通过 Run 启动服务。 在 Run 函数中,按序分别初始化 APIServer 链(APIExtensionsServer、KubeAPIServer、AggregatorServer),分别服务于 CRD(用户自定义资源)、K8s API(内置资源

    2024年02月16日
    浏览(28)
  • k8s修改apiserver证书可用年限

    使用 kubeadm 部署的 K8S 集群中,apiserver 证书的默认可用年限只有一年。如果直接用在生产环境,当证书过期后会造成 K8S 集群瘫痪,从而影响现网业务。 1,查看 K8S 集群所有证书存放位置 2,查看 apiserver 证书信息,默认可用年限只有一年 3,查看 ca 证书信息,默认可用年限为

    2024年02月08日
    浏览(26)
  • K8S集群实现外部访问(INGRESS)

    环境: master node01 node02 192.168.1.40 192.168.1.41 192.168.1.42 作用:Ingress 是对集群中服务的外部访问进行管理的 API 对象。 PS:创建nginx和httpd PS:namespace为ingress-nginx PS:它现在已经有一个模板,用来描述Ingress资源能够收集到的信息了 PS:有DNS的话可以设置解析,没有的话必须在h

    2024年01月19日
    浏览(34)
  • k8s实现外部访问minikube集群

    我们现在大家都知道了 minikube集群相当于k8s的一个虚拟机。 同时pod每次消亡重建之后都会分配一个虚拟的ip,这个ip可供集群内部访问,但是如果要对外访问呢? 我们可以给他暴露ip出来,但是如果pod宕机后重建ip就发生了变化,所以不能对pod进行ip的暴露。 那应该对什么进行

    2024年02月03日
    浏览(34)
  • k8s配置ingress访问集群外部资源

    使用ingress访问外部资源,首先需要创建service指向我们需要访问的资源 而每个service包含一个endpoint endpoint是k8s集群中的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod的访问地址。service配置selector,endpoint controller才会自动创建对应的endpoint对象;否则,不会生

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包