前面的笔记中介绍过说多节点的kind集群yaml:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
这样的多节点生成后发现生成的pod竟然无法访问,查阅文档发现kind集群的端口需要和node的端口映射,官方建议是listenAddress写为0.0.0.0,并不是127.0.0.1
主机端口应该是0-65535 而container端口开放好像是30000-32767
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 80
hostPort: 31180
listenAddress: "0.0.0.0"
- containerPort: 30100
hostPort: 41100
listenAddress: "0.0.0.0"
- role: worker
extraPortMappings:
- containerPort: 80
hostPort: 31280
listenAddress: "0.0.0.0"
- containerPort: 30100
hostPort: 42100
listenAddress: "0.0.0.0"
- role: worker
extraPortMappings:
- containerPort: 80
hostPort: 31380
listenAddress: "0.0.0.0"
- containerPort: 30100
hostPort: 43100
listenAddress: "0.0.0.0"
这段yaml 做了比较简单的映射,把容器上的80、30100 端口映射到节点的不同的端口上,如果有需求可以映射更多的端口
创建集群并指定集群名字:
kind create cluster --config mykind.yaml --name mykind
nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
selector:
matchLabels:
lb: ng
replicas: 3
template:
metadata:
labels:
lb: ng #pod的label
spec:
containers:
- name: nginxweb
image: nginx
ports:
- containerPort: 80
service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
lb: ng
type: NodePort
ports:
- protocol: TCP
port: 10008 #pod端口,可在pod中通过k8s的clusterip访问
targetPort: 80 #容器端口
nodePort: 30100 #node端口
这样就可以访问了:curl localhost:41100,注意是主机端口,因为之前生成集群的时候映射出来了