sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-02 12:13:52 26 4
mua khóa gpt4 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 32156:32666/TCP 30s
[root@master ~]#

现在,端点没有更新,因为在kubectl创建服务期间我们没有选择使用标签选择器的选项
[root@master ~]# kubectl get ep tomsvc
NAME ENDPOINTS AGE
tomsvc 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
cổng:
- 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 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的选择?

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

1 Câu trả lời

如果要创建部署并使用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
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com