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,看起来是正常的

相关推荐
猫头虎17 小时前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
晚风吹人醒.19 小时前
SSH远程管理及访问控制
linux·运维·ssh·scp·xshell·访问控制·远程管理
DigitalOcean19 小时前
DigitalOcean容器注册表推出多注册表支持功能
容器
Uncertainty!!20 小时前
Linux多用户情况下个别用户输入密码后黑屏
linux·远程连接
necessary65320 小时前
使用Clion查看linux环境中的PG源码
linux·运维·服务器
江湖有缘21 小时前
Jump个人仪表盘Docker化部署教程:从0到 搭建专属导航页
运维·docker·容器
小猪佩奇TONY21 小时前
Linux 内核学习(14) --- linux x86-32 虚拟地址空间
linux·学习
Lam㊣21 小时前
Centos 7 系统docker:更换镜像源
linux·docker·centos
FL16238631291 天前
win11+WSL+Ubuntu-xrdp+远程桌面闪退+黑屏闪退解决
linux·运维·ubuntu
石头5301 天前
Kubernetes监控全栈解决方案:从零搭建Prometheus+Grafana监控体系
linux