我正在执行kubectl create -f nginx.yaml
,这会成功创建广告连播。但PODS并未在我的实例的公共IP上公开。以下是使用YAML作为nodeport的服务类型:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
name: nginx
spec:
type: NodePort
ports:
- port: 80
nodePort: 30080
name: http
- port: 443
nodePort: 30443
name: https
selector:
name: nginx
在我的方法或YAML文件之上有什么可能是不正确的,以便在部署到公共IP时暴露pod?
PS:防火墙和ACL在所有TCP上对互联网开放
答案 0 :(得分:1)
Jeel是对的。您的服务选择器与Pod标签不匹配。
如果你像杰尔已经在这个答案中添加的那样解决了这个问题
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
name: nginx
spec:
type: NodePort
ports:
- port: 80
nodePort: 30080
name: http
selector:
name: nginx
您的服务将以节点IP地址公开。因为您的服务类型是NodePort。
如果您的节点IP是35.226.16.207
,您可以使用此IP和NodePort连接到您的Pod
$ curl 35.226.16.207:30080
在这种情况下,您的节点必须具有公共IP。否则,您无法访问
第二个选项,您可以创建LoadBalancer类型服务
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
name: nginx
spec:
type: LoadBalancer
ports:
- port: 80
name: http
selector:
name: nginx
这将为您提供公共IP。
有关详细信息,请check this
答案 1 :(得分:0)
端点没有被添加。在调试时,我发现部署和服务之间的标签不匹配。因此将标签类型从“app”更改为“name”并且它有效。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
name: nginx
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
name: nginx
spec:
type: NodePort
ports:
- port: 80
nodePort: 30080
name: http
selector:
name: nginx