k8s部署应用nginx
几个kubernetes知识点pods = pod+pod+pod+···每个pod在工作节点(worker)上,并且每个pod在全局k8s集群中有唯一的IP地址,此IP是k8s集群内部控制生成的虚拟IP,外网是无法ping通pod的ip一个pod可以有多个(>=1)容器,但是单个pod内部的容器之间对外开放的端口号必须唯一,因为pod内部的容器之间可以通过localhost直接访问如果外网
·
几个kubernetes知识点
- pods = pod+pod+pod+···
- 每个pod在工作节点(worker)上,并且每个pod在全局k8s集群中有唯一的IP地址,此IP是k8s集群内部控制生成的虚拟IP,外网是无法ping通pod的ip
- 一个pod可以有多个(>=1)容器,但是单个pod内部的容器之间对外开放的端口号必须唯一,因为pod内部的容器之间可以通过localhost直接访问
- 如果外网需要访问pod内部的容器服务,那么就需要k8s建立一组网络服务映射,连接内外部网络。
使用k8s部署nginx并外网访问
1. 写在前面:自己的k8s集群信息
- 共两台linux,master为集群管理角色,worker为集群实际工作角色
- master:192.168.192.131
- worker:192.168.192.131、192.168.192.132
2. 创建namespase.yaml
apiVersion: v1 #类型为Namespace
kind: Namespace #类型为Namespace
metadata:
name: ssx #命名空间名称
labels:
name: ssx
kubectl create -f namespase.yaml
kubectl get namespace
3.创建deployment.yaml 创建service.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx #为该Deployment设置key为app,value为nginx的标签
name: ssx-nginx-dm
namespace: ssx
spec:
replicas: 1
selector: #标签选择器,与上面的标签共同作用
matchLabels:
app: nginx #选择包含标签app:nginx的资源
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
app: nginx
spec: #期望Pod实现的功能(即在pod中部署)
containers: #生成container,与docker中的container是同一种
- image: 'node102:5000/ssx-nginx:v1.0'
imagePullPolicy: IfNotPresent
name: ssx-nginx-c
ports:
- containerPort: 80 # 开启本容器的80端口可访问
- containerPort: 81 # 开启本容器的81端口可访问
- containerPort: 82
- containerPort: 83
- containerPort: 85
- containerPort: 86
- containerPort: 87
- containerPort: 88
- containerPort: 89
- containerPort: 91
- containerPort: 92
- containerPort: 93
- containerPort: 94
volumeMounts:
- mountPath: /etc/localtime
name: c-v-path
- mountPath: /etc/nginx/conf.d
name: c-v-path-ng
hostAliases:
- hostnames:
- node101
ip: 192.168.0.101
- hostnames:
- node102
ip: 192.168.0.102
- hostnames:
- node103
ip: 192.168.0.103
nodeSelector:
kubernetes.io/hostname: node101
restartPolicy: Always
volumes:
- hostPath:
path: /etc/localtime
type: ''
name: c-v-path
- hostPath:
path: /home/app/apps/k8s/for_docker_volume/nginx
type: ''
name: c-v-path-ng
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: ssx-nginx-sv
namespace: ssx
spec:
externalTrafficPolicy: Local #仅当pod和service在同一台物理机,用于获取用户IP
ports:
- name: ssx-nginx-last80
nodePort: 31080 #外网访问的端口
port: 9080
protocol: TCP
targetPort: 80 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last81
nodePort: 31081 #外网访问的端口
port: 9081
protocol: TCP
targetPort: 81 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last82
nodePort: 31082 #外网访问的端口
port: 9082
protocol: TCP
targetPort: 82 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last83
nodePort: 31083 #外网访问的端口
port: 9083
protocol: TCP
targetPort: 83 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last84
nodePort: 31084 #外网访问的端口
port: 9084
protocol: TCP
targetPort: 84 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last85
nodePort: 31085 #外网访问的端口
port: 9085
protocol: TCP
targetPort: 85 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last86
nodePort: 31086 #外网访问的端口
port: 9086
protocol: TCP
targetPort: 86 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last87
nodePort: 31087 #外网访问的端口
port: 9087
protocol: TCP
targetPort: 87 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last88
nodePort: 31088 #外网访问的端口
port: 9088
protocol: TCP
targetPort: 88 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last89
nodePort: 31089 #外网访问的端口
port: 9089
protocol: TCP
targetPort: 89 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last91
nodePort: 31091 #外网访问的端口
port: 9091
protocol: TCP
targetPort: 91 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last92
nodePort: 31092 #外网访问的端口
port: 9092
protocol: TCP
targetPort: 92 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last93
nodePort: 31093 #外网访问的端口
port: 9093
protocol: TCP
targetPort: 93 # 容器nginx对外开放的端口 上面的dm已经指定了
- name: ssx-nginx-last94
nodePort: 31094 #外网访问的端口
port: 9094
protocol: TCP
targetPort: 94 # 容器nginx对外开放的端口 上面的dm已经指定了
selector:
app: nginx
type: NodePort
- 查询ssx-nginx-ns命名空间下的pods
kubectl get pods -n ssx -o wide[root@node131 ~]# kubectl get pods -n ssx -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ssx-nginx-dm-76ddccf49c-65d82 1/1 Running 0 10m 10.234.240.29 node131 <none> <none> ssx-nginx-dm-76ddccf49c-lwtls 1/1 Running 0 10m 10.234.4.45 node132 <none> <none>
- 此时查询集群的pods:新增一个ssx-nginx-dm,并且该pod的ip地址是10.234.x.x
并且外网无法访问nginx服务,但是同一个pod中的其他容器可以通过localhost:80来访问nginx
5. 在外网打开浏览器 http://192.168.192.132:31090
即可实现访问nginx
end
更多推荐
已为社区贡献4条内容
所有评论(0)