Knowledge center

使用阿里云容器服务Kubernetes通过init Container形式变更Pod的iptables-阿里云开发者社区(en)

2019-11-28 00:00:00 mimukeji

  本文主要涉及两个镜像:第一个是包含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规则是相同的。

(en)

阿里云优惠新机+优惠券

本文转载自网络,如有侵权,请联系我们删除。

Home

About

product

success

news

form

bbs

contact

工单(en)

阿里云报价咨询(en)