为什么我可以通过' port '而不是' nodePort '访问我的服务?



我是Kubernetes的新手,在这一点上卡住了。请分享答案的参考资料。以下是我的简单的.yml文件。

apiVersion: apps/v1
kind: Deployment
metadata:
name: test-depl
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: test-serv-load
spec:
selector:
app: nginx
type: LoadBalancer  
ports:
- protocol: TCP
port: 8080
targetPort: 80
nodePort: 30001

服务的输出如下:

$ kubectl get services 
NAME                TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)          AGE
test-serv-load      LoadBalancer   10.0.68.36   <my_pub_IP>     8080:30001/TCP   97m
kubernetes          ClusterIP      10.0.0.1     <none>          443/TCP          3h30m

根据我的理解,Nginx应该可以通过<my_pub_IP>:30001访问,但奇怪的是它可以通过<my_pub_IP>:8080访问,而不是<my_pub_IP>:30001

我在网上查了好几天,找不到任何原因。如果我在配置中缺少了什么,请让我知道。

服务类型是LoadBalancer,所以它应该可以在<Public-IP>:targetport上访问,正如预期的那样。nodePort字段仅在服务类型为NodePort时有效,这里该字段没有意义,您可以从清单中删除它。

也许,为了进一步理解这一点,您可以将服务类型更改为NodePort,然后尝试通过<Node-IP>:30001访问它。(在本例中,port领域将成为可选的,因为交通收到nodePort将被路由到服务)

下面是对Kubernetes服务以及不同服务类型如何工作的进一步阅读。

最新更新