上次的实验中创建的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容器了;
这样就实现了可供外网访问的一个容器实验了。