我正在使用ReplicaSet来管理我的Pod,并尝试使用服务来公开这些Pod。由ReplicaSet创建的Pod具有随机名称。
NAME READY STATUS RESTARTS AGE
master 2/2 Running 0 20m
worker-4szkz 2/2 Running 0 21m
worker-hwnzt 2/2 Running 0 21m
由于某些政策限制我只能使用hostNetwork=true
,因此我尝试通过服务公开这些Pod。我可以通过使用NodePort
为每个Pod创建一个kubectl expose pod worker-xxxxx --type=NodePort
服务来暴露它们。
这显然不是灵活的方法。我不知道如何创建服务(可能是LoadBalancer类型?)来动态访问我的ReplicaSet中的所有副本。如果有这样的部署,那也将是完美的。
感谢您的帮助和建议!
修改:
我在我的ReplicaSet上放置了一个标签,并选择了名为worker
的NodePort类型服务。但是我无法在任何一个吊舱中ping worker
。正确的方法是什么?
下面是kubectl describe service worker
的给出方式。如Endpoints
所示,吊舱已拾起。
Name: worker
Namespace: default
Annotations: <none>
Selector: tag=worker
Type: NodePort
IP: 10.106.45.174
Port: port1 29999/TCP
TargetPort: 29999/TCP
NodePort: port1 31934/TCP
Endpoints: 10.32.0.3:29999,10.40.0.2:29999
Port: port2 29996/TCP
TargetPort: 29996/TCP
NodePort: port2 31881/TCP
Endpoints: 10.32.0.3:29996,10.40.0.2:29996
Port: port3 30001/TCP
TargetPort: 30001/TCP
NodePort: port3 31877/TCP
Endpoints: 10.32.0.3:30001,10.40.0.2:30001
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
答案 0 :(得分:2)
我相信您可以通过使用Deployments而不是ReplicaSets(现在是标准方法)来对它进行一些优化,即您可以进行如下部署:
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-service
spec:
# This is the important part as this is what is used to route to
# the pods created by your deployment
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80