k8s中的容器服务

cluster IP

service通过labels管理deployment,deplyment通过标签管理pod。但是如果想要能够通过service访问pod的服务,需要service和pod的标签相同。如果只是和deployment的标签相同,而deployment又通过不同的标签管理pod,那么通过service暴露的ip则访问不通。

我之前以为service匹配deployment就可以了,然后由deployment去将请求给到pod就行了,但是现在看来不仅如此,还需要service和pod labels相同才行。

默认的service相当轮询

无头服务:

对于无头 Services 并不会分配 Cluster IP,kube-proxy不会处理它们, 而且平台也不会为它们进行负载均衡和路由,集群访问通过dns解析直接指向到业务pod上的IP,所有的调度有dns单独完成

如果想访问无头模式下的service

方式1: 可以进入pod里面,然后执行nslookup 服务名(随便哪个pod都行)

然后直接curl 地址

方法2:通过pod的域名访问,待实践

NodePort

1. 首先还是创建pod

不过我发现了这个容易被忽视的name参数。容器的唯一标识。因为一pod可以有多个容器,pod的name就是用来区分的。

使用 kubectl logs <pod名称> -c myapp 可以查看该容器的日志,kubectl exec -it <pod名称> -c myapp -- /bin/bash 可以进入该容器的命令行界面。

2. 创建svc

在这里把spec.type类型改一下

3. 访问一下

集群内:

集群外:

正常是外部主机通过master节点的对外ip:<port>来访问pod业务

云上由于每个都能成为master,测试下来发现访问每个节点都会跳过去。

4. 注意

nodeport默认端口是30000-32767,超出会报错

  1. 不想使用默认端口,想使用自定义的,添加这个参数即可
  1. 想自定义某个范围的端口号

vim /etc/kubernetes/manifests/kube-apiserver.yaml

添加"--service-node-port-range=" 参数,端口范围可以自定义

修改后api-server会自动重启,等apiserver正常启动后才能操作集群

集群重启自动完成在修改完参数后全程不需要人为干预

loadbalancer

云平台会自动帮我们创建一个vip

访问:

这里如果服务不是默认80端口的话,也要指定端口哦

ingress

Ingress由两部分组成:Ingress controller和Ingress服务

Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。

业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的 Ingress Controller。

1. 安装ingress,云平台安装组件后自动

在ingress-nginx-controller中看到的对外IP就是ingress最终对外开放的ip

2. 创建ingress对象,也就是定义转发规则

3. 访问

基于域名

这里访问不通的原因

因为规则配置了带域名了,如果想要通过IP访问

要么不配置域名,要么这样

基于路径访问

这个时候你会发现访问不通

因为没有配置annotations,默认情况下,Nginx Ingress 将访问路径直接转发到后端服务中的相同路径,如果不配置 URL 重写规则,由于访问路径和服务路径不同,访问将返回404

因为服务的路径一直是www.myapp.com. 这两个服务其实访问路径都是www.myapp.com. 只是通过path去选择某一个service。这点很重要!

nginx.ingress.kubernetes.io/rewrite-target: / #访问路径后加任何内容都被定向到/

配置后访问:

tls加密
  1. 生成证书密钥

openssl req -newkey rsa:2048 -nodes -keyout tls.key -x509 -days 365 -subj "/CN=nginxsvc/O=nginxsvc" -out tls.crt

2.创建secret

kubectl create secret tls web-tls-secret --key tls.key --cert tls.crt

  1. 修改ingress

访问

auth认证
  1. 通过htpasswd生成认证文件
  1. 生成secret
  1. 创建ingress

成功访问和失败访问

配置上域名试试

OK,看起来是正常的

相关推荐
wj3055853787 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
abigriver7 小时前
打造 Linux 离线大模型级语音输入法:Whisper.cpp + 3090 显卡加速与 Rime 中英混输终极调优指南
linux·运维·whisper
wangqiaowq8 小时前
windows下nginx的安装
linux·服务器·前端
YYRAN_ZZU8 小时前
Petalinux新建自动脚本启动
linux
charlie1145141918 小时前
嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路
linux·运维·驱动开发
于小猿Sup9 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
cen__y9 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
不仙52010 小时前
VMware Workstation 26.0.0 在 Ubuntu 24.04 (内核 6.17.0) 上的安装与内核模块编译问题
linux·ubuntu·elasticsearch
AI视觉网奇11 小时前
linux 检索库 判断库是否支持
java·linux·服务器
dapeng-大鹏11 小时前
KVM+LVM 零停机在线扩容 Ubuntu 根分区:从磁盘添加到逻辑卷扩展完整
linux·运维·ubuntu·磁盘空间扩展