上次的实验中创建的Nginx容器只能使用内网IP访问,外网是无法访问的,这并不是我们想要的。一个服务要能够通过外网IP地址访问到内网里的容器服务那才是最终的结果;今天继续通过Kubernetes来创建容器并通过宿主机IP地址加端口方法访问到Nginx服务;
创建一个nging_service.yaml配置文件
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
externalIPs:
- 10.0.10.135
ports:
- port: 8000
targetPort: 80
protocol: TCP
selector:
app: web01
说明:上面配置中定义一个service服务,命令为nginx-service,定义对外的IP地址为:本机的10.0.10.135,把宿主机上的8000端口映射到容器80端口上,走和协议为TCP,选择器选择所有属于app=web01分组的容器,这个对于集群就很方便了;
接下来再定义一个nginx_pod.yaml配置文件:
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 1
selector:
app: web01
template:
metadata:
name: nginx
labels:
app: web01
spec:
containers:
- name: nginx
image: reg.docker.tb/harbor/nginx:latest
ports:
- containerPort: 80
说明:这里跟之前的Pod是有区别的,这里定义的类型为ReplicationController 复制控制,并定义app名为web01;
执行创建命令:
[root@node5 ~]# kubectl create -f nginx_service.yaml
service "nginx-service" created
[root@node5 ~]# kubectl create -f nginx_pod.yaml
replicationcontroller "nginx" created
[root@node5 ~]# kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 2d
nginx-service 10.254.182.210 10.0.10.135 8000/TCP 11s
[root@node5 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-27hgx 1/1 Running 0 10s
看到这个nginx-service有一个EXTERNAL-IP为10.0.10.135 这就是对外的IP地址;打开浏览器访问10.0.10.135:8000即可访问到Nginx容器了;
这样就实现了可供外网访问的一个容器实验了。