使用阿里云容器服务Kubernetes通过init Container形式变更Pod的iptables

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: iptables可以看做客户端代理,通过一系列规则对数据包进行处理。本文主要讲述如何使用阿里云容器服务Kubernetes,通过已有镜像形式部署包含iptables规则变更的应用,及如何查看规则是否生效。在笔者操作过程中,碰到了权限问题,也会在本文中说明。涉及到镜像打包上传的内容,会在另外一篇文章中讲解。

  本文主要涉及两个镜像:第一个是包含iptables规则变更脚本的镜像,名称为ali-test.test.com/app/proxy_iptables版本为 release_v0.0.1_develop,另一个是简单应用hello-world的镜像,名称为ali-test.test.com/app/tutum/hello-world,版本为release_v0.0.1。其中ali-test.test.com为私有镜像仓库地址,app为项目名称,第一个镜像作为init container形式启动。
  第一个镜像proxy_iptables:release_v0.0.1_develop,包含了对iptables的变更脚本,抽取脚本中部分命令,如下所示:

#请求转发到proxy_port定义的端口
echo "begin pull iptables rules"
proxy_port=$1
echo "proxy port = $proxy_port"
iptables -t nat -N PROXY_REDIRECT
iptables -t nat -A PROXY_REDIRECT -p tcp -j REDIRECT --to-port "${proxy_port}"
......

  下面开始通过阿里云控制台使用容器服务-kubernetes。控制台入口为:应用--选择“无状态”--选择一个集群开始操作(阿里云账户需要有操作权限)。步骤如下:

(1)首先创建命名空间或者使用已有命名空间
(2)点击“使用镜像创建”,填写应用名称、副本数量,勾选时区同步,如图一所示:

step1.png

图一

(3)点击“下一步”,进行容器配置,配置镜像名称ali-test.test.com/app/proxy_iptables,镜像tag为release_v0.0.1_develop,所属资源根据使用填写。对于此应用,需要勾选Init Container。因为此镜像仅包含了脚本,其它配置可以不用填写,如图二所示:
image.png

图二

(4) 点击“添加容器”,以相同的形式,部署hello-world应用,不勾选“Init Container”,如图三所示。接着下一步,直至创建完成。

image.png

图三

(5) 查看proxy_iptables容器日志,会发现容器在执行iptables命令时异常:Permission denied,如图四所示:

image.png

图四

解决方式如下:
打开应用的yaml文件,在initContainer容器配置中添加:

securityContext:
     privileged: true

如图五所示:

image.png

图五

更新后,查看容器日志,iptables命令可正常执行,hello-world应用启动正常。
(6)登录hello-world应用容器,查看iptables变更,命令如下:
查看运行的容器信息,并获取container ID:

docker ps |grep lyl

查看容器PID:

docker top $container_id

查看iptables变更:

nsenter -t $PID   -n iptables  -t nat -S

通过查看容器日志,可以看到iptables脚本变更正常执行。
至此,部署完成,Pod及container正常启动运行。

其它说明:
k8s pod内部容器是共享网络空间的,通过命令查看iptables的规则,同一个pod内的多个container规则是相同的。

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
域名解析 网络协议 API
【Azure Container App】配置容器应用的缩放规则 Managed Identity 连接中国区 Azure Service Bus 问题
本文介绍了在 Azure Container Apps 中配置基于自定义 Azure Service Bus 的自动缩放规则时,因未指定云环境导致的域名解析错误问题。解决方案是在扩展规则中添加 `cloud=AzureChinaCloud` 参数,以适配中国区 Azure 环境。内容涵盖问题描述、原因分析、解决方法及配置示例,适用于使用 KEDA 实现事件驱动自动缩放的场景。
|
1月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
225 2
|
7月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
250 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
7月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
184 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
8月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
133 1
|
7月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
8月前
|
弹性计算 监控 持续交付
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
187 0
|
Kubernetes Java 开发者
部署应用到阿里云容器服务 Kubernetes| 学习笔记
快速学习部署应用到阿里云容器服务 Kubernetes。
258 0
部署应用到阿里云容器服务 Kubernetes| 学习笔记
|
Kubernetes Java 开发者
部署应用到阿里云容器服务 Kubernetes| 学习笔记
快速学习部署应用到阿里云容器服务 Kubernetes。
504 0
 部署应用到阿里云容器服务 Kubernetes| 学习笔记
|
5月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
207 9

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 推荐镜像

    更多