我是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服务以及不同服务类型如何工作的进一步阅读。