[英]How to expose nginx on public Ip using NodePort service in Kubernetes?
我正在執行kubectl create -f nginx.yaml
,它成功創建了pod。 但是PODS並未在我的實例的公共IP上公開。 以下是用於服務類型為nodeport的YAML:
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文件上方以將pod公開給公共IP暴露的方法有什么不正確之處?
PS:防火牆和ACL在所有TCP上均對Internet開放
耶爾是對的。 您的服務選擇器與Pod標簽不匹配。
如果您像Jeel已在此答案中添加的那樣解決問題
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。
如果您的Node IP是35.226.16.207
,則可以使用此IP和NodePort連接到Pod
$ curl 35.226.16.207:30080
在這種情況下,您的節點必須具有公共IP。 否則,您將無法訪問
第二種選擇 ,您可以創建LoadBalancer Type Service
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
name: nginx
spec:
type: LoadBalancer
ports:
- port: 80
name: http
selector:
name: nginx
這將為您提供一個公共IP。
有關更多詳細信息, 請檢查此
沒有添加端點。 在調試時,我發現部署和服務之間的標簽不匹配。 因此,將標簽類型從“ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.