我在GKE上创建了一个VPC本地群集,禁用了主授权网络。 我认为我所做的所有事情都正确无误,但仍然无法从外部访问该应用程序。
下面是我的服务清单。
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.16.0 (0c01309)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
ports:
- name: '3000'
port: 80
targetPort: 3000
protocol: TCP
nodePort: 30382
selector:
io.kompose.service: app
type: NodePort
该应用程序的容器端口为3000
,我从日志中检查它是否正常运行。
我还添加了防火墙以在vpc网络中打开30382
端口。
我仍然无法访问具有指定nodePort的节点。
我有什么想念吗?
kubectl get ep
:
NAME ENDPOINTS AGE
app 10.20.0.10:3000 6h17m
kubernetes 34.69.50.167:443 29h
kubectl get svc
:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
app NodePort 10.24.6.14 <none> 80:30382/TCP 6h25m
kubernetes ClusterIP 10.24.0.1 <none> 443/TCP 29h
答案 0 :(得分:3)
在Kubernetes中,service用于与Pod通信。
要将Pod暴露在kubernetes集群之外,您将需要NodePort
类型的k8s服务。
NodePort
设置适用于Kubernetes服务。默认情况下,可以在ClusterIP上访问Kubernetes服务,该IP是只能从Kubernetes集群内部访问的内部 IP地址。 ClusterIP使Pod中运行的应用程序可以访问服务。为了使服务可以从群集外部访问,用户可以创建NodePort类型的服务。
请注意,需要为群集中的一个节点分配外部 IP地址,并需要允许进入该端口的流量的防火墙规则。结果,Kubernetes节点上的kubeproxy(连接了外部IP地址)会将该端口代理到服务选择的Pod。