前提条件
kubectl cluster-info
还需确认您在缺省命名空间内的权限是否足够(可能与缺省命名空间不同)。edit角色权限能够满足实验需求。如果您为本教程创建了一个集群,那么您可能就是管理员。或者让其他人为您准备好环境。
备注:如果您不想用公共的镜像文件,而想自己构建并推送一个自定义的境像。那我们假定您和您的集群是可以访问容器镜像注册器的。同样的,也可以让其他人为您准备好此环境。业界协作比较好的组合环境包括GKE与GCR、AKS与ACR等。另外,DockerHub和Quay也是非常流行的镜像注册器。如果不打算公开自己的容器镜像,则需要在私有的命名空间中,给默认服务帐户配置拉取镜像密钥。
构建和推送
应教学目的需要,我们将从一个简单的Web应用源代码开始教程。下面是Node.js文档中的一个案例应用代码(或采用您所喜欢的编程语言编写一个类似的应用程序)。将以下的代码复制到一个名为app.js的文件中,并存放在一个空的文件夹下。
*// app.js
const http = require('http');
const os = require('os');
const ip = '0.0.0.0';
const port = 3000;
const hostname = os.hostname();
const whoami = process.env['WHOAMI'] || 'Anonymous';
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end(`Hi, I’m ${whoami}, from ${hostname}.\n`);
});
server.listen(port, ip, () => {
console.log(`Server running at http://${ip}:${port}/`);
});*
我们对上述案例代码做了一些调整:
将服务器本机IP定义为0.0.0.0而不是127.0.0.1。因为后者仅仅适用于IP回路寻址。而这段程序需监听来自一个集群IP的请求(由0.0.0.0捕获请求)。
将“Hello World”消息分拆为2个变量:主机名,提供请求响应的一个副本节点的标识;WHOAMI环境变量,在部署时设定,默认值为“Anonymous”。
node app.js # 打开链接 http://localhost:3000测试
备注:如果您在自己的Kubernetes集群环境进行测试,无需担心TLS终端和授权问题,因为这个应用可以在集群的边界运行,例如Ambassador。如果您采用Zero-trust,这段代码可以运行在Istio之类服务网格集群的微服务内。
接下来将应用打包成一个Docker镜像。复制如下代码,保存为Dockerfile的文件:
# Dockerfile
FROM node:8
COPY app.js .
ENTRYPOINT [“node”, “app.js”]
在文件所在目录下,执行命令: