gpt4 book ai didi

kubernetes - 使用kubectl暴露时,是否可以选择通过nodeport服务发布服务的主机端口?

转载 作者:行者123 更新时间:2023-12-02 12:13:52 26 4
gpt4 key购买 nike

我想通过nodeport服务方法公开tomcat服务。我正在尝试使用kubectl run命令选项实现相同的功能,而不是将 list yaml文件与kubectl(应用或创建)命令一起使用

[root@master ~]# kubectl run tom --image=tomcat --replicas=3 --port=8080 --labels="env=prod"
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/tom created

[root@master ~]# kubectl create service nodeport tomsvc --tcp=32156:8080 --node-port=32666
service/tomsvc created
[root@master ~]#

[root@master ~]# kubectl get svc tomsvc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tomsvc NodePort 10.98.117.174 <none> 32156:32666/TCP 30s
[root@master ~]#

现在,端点没有更新,因为在kubectl创建服务期间我们没有选择使用标签选择器的选项
[root@master ~]# kubectl get ep tomsvc
NAME ENDPOINTS AGE
tomsvc <none> 62s
[root@master ~]#

将选择器从默认更改为env:prod,端点已更新
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2019-12-28T14:30:21Z"
labels:
app: tomsvc
name: tomsvc
namespace: default
resourceVersion: "1834608"
selfLink: /api/v1/namespaces/default/services/tomsvc
uid: 696f4dde-341a-4118-b02b-6aa53df18f74
spec:
clusterIP: 10.98.117.174
externalTrafficPolicy: Cluster
ports:
- name: 32156-8080
nodePort: 32666
port: 32156
protocol: TCP
targetPort: 8080
selector:
app: tomsvc
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
~

现在,我可以看到使用pod ip地址和目标端口更新的端点,这些端点的标签为env:prod
[root@master ~]# kubectl get ep tomsvc
NAME ENDPOINTS AGE
tomsvc 10.36.0.2:8080,10.36.0.3:8080,10.36.0.4:8080 4m20s
[root@master ~]#

因此,为了避免使用此选项来编辑nodeport服务yaml文件以更新选择器,我看到有一个选项kubectl暴露选项可以发布服务

删除该节点端口服务,并使用kubectl暴露选项重新创建
[root@master ~]# kubectl delete svc tomsvc
service "tomsvc" deleted

[root@master ~]# kubectl expose deployment tom --port=32156 --type=NodePort --target-port=8080
service/tom exposed
[root@master ~]# kubectl get svc tom
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tom NodePort 10.107.182.35 <none> 32156:30397/TCP 19s

现在,端点会自动使用具有env:prod作为标签的Pod更新
[root@master ~]# kubectl get ep tom
NAME ENDPOINTS AGE
tom 10.36.0.2:8080,10.36.0.3:8080,10.36.0.4:8080 25s
[root@master ~]#

我的问题是,为什么在使用kubectl create service命令时没有选择通过选择器的选项,为什么在运行kubectl暴露命令时没有选择--nodeport的选择?

从技术上讲,我在这里有什么误会吗?

最佳答案

如果要创建部署并使用kubectl run命令将其公开,则可以使用以下命令进行部署:
kubectl run tom --image=tomcat --replicas=3 --port=8080 --labels="env=prod" --expose=true --service-overrides='{ "spec": { "type": "NodePort" } }'
--expose=true创建一个服务(默认为ClusterIP),并使用与为部署指定的相同选择器将其分配给部署。
--service-overrides='{ "spec": { "type": "NodePort" } }'将其类型更改为NodePort。

关于kubernetes - 使用kubectl暴露时,是否可以选择通过nodeport服务发布服务的主机端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59511949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com