我有一个带有主节点和其他两个节点的 Kubernetes 集群:
sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION
kubernetes-master Ready master 4h v1.10.2
kubernetes-node1 Ready <none> 4h v1.10.2
kubernetes-node2 Ready <none> 34m v1.10.2
Run Code Online (Sandbox Code Playgroud)
它们每个都在 VirtualBox Ubuntu VM 上运行,可以从来宾计算机访问:
kubernetes-master (192.168.56.3)
kubernetes-node1 (192.168.56.4)
kubernetes-node2 (192.168.56.6)
Run Code Online (Sandbox Code Playgroud)
我部署了一个带有两个副本的 nginx 服务器,每个 kubernetes-node-x 有一个 pod:
sudo kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deployment-64ff85b579-5k5zh 1/1 Running 0 8s 192.168.129.71 kubernetes-node1
nginx-deployment-64ff85b579-b9zcz 1/1 Running 0 8s 192.168.22.66 kubernetes-node2
Run Code Online (Sandbox Code Playgroud)
接下来,我将 nginx-deployment 的服务公开为 NodePort,以便从集群外部访问它:
sudo kubectl expose deployment/nginx-deployment --type=NodePort …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用单个 Service yaml 设置对多个节点上的 Pod 的访问。Pod 都具有相同的标签(例如label:app),但分布在多个节点上,而不是分布在单个节点上。
据我所知,我可以设置一个 Service 通过 NodePort 转发对 Pod 的访问,例如:
spec:
type: NodePort
selector:
label: app
ports:
targetPort: 5000
nodePort: 30000
Run Code Online (Sandbox Code Playgroud)
其中,访问节点上的端口 30000 会转发到 pod 上的端口 5000。
如果我在多个节点上有 pod,客户端是否可以访问单个端点(例如服务本身)以循环方式获取任何 pod?或者客户端是否需要使用该节点的 IP 来访问特定节点上的一组 pod,如图所示xx.xx.xx.xx:30000?
我正在我的AWS EC2上通过Minikube在Kubernetes上进行练习。作为其中的一部分,我创建了部署并通过NodePort服务公开它,然后检查:
curl http://<node-ip>:<service-port>
Run Code Online (Sandbox Code Playgroud)
在 EC2 机器中运行良好。但是当我在浏览器上点击相同的 URL 时,我得到了:
This site can't be reached
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决问题是什么以及如何访问它?
谢谢。
这是我的部署 YAML 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myfirstdeployment
labels:
app: web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
name: myfirstpod
labels:
app: web
spec:
containers:
- name: myfirstpod-1
image: nginx
command: ["sleep","3600"]
ports:
- containerPort: 80
这是我的服务 YAML 文件
apiVersion: v1
kind: Service
metadata:
name: myfirstservice
spec:
selector:
app: web
ports: …Run Code Online (Sandbox Code Playgroud) 我有一个Kubernetes服务,通过这样做选择:
spec:
selector:
backend: nlp-server
Run Code Online (Sandbox Code Playgroud)
如果有多个Pods匹配选择器,那请求Pod的Service路由?
我正在使用默认ClusterIP设置.搜索"ClusterIP:在集群内部IP上公开服务.选择此值使服务只能从集群中访问.这是默认的ServiceType." 在文档中
如果我希望服务路由到有意义的Pod(负载较小),
那么内部负载均衡器是我需要的吗?
我指定了一个端口,如下所示。
我的应用程序服务.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: my-app
name: my-app-service
namespace: default
spec:
externalTrafficPolicy: Cluster
ports:
- port: 80
name: my-port
protocol: TCP
targetPort: 8000
selector:
app: my-app
sessionAffinity: None
type: NodePort
Run Code Online (Sandbox Code Playgroud)
cloudbuild.yaml摘要:
steps:
- name: gcr.io/cloud-builders/gcloud
- name: gcr.io/cloud-builders/docker
- name: gcr.io/cloud-builders/gke-deploy
Run Code Online (Sandbox Code Playgroud)
由于某种原因,当 port1 甚至不存在时,我收到一个错误,要求在 port1 上输入名称参数。见下文。
输出:
Step #3: Applying deployment.
Step #3: Getting access to cluster "my-cluster" in "my-zone".
Step #3: Configuration files to be used: [{kind: Deployment, name: my-app} {kind: HorizontalPodAutoscaler, name: my-app-hpa} {kind: …Run Code Online (Sandbox Code Playgroud) 你好,我正在使用 minikube 学习 Kubernetes。我可以在运行 minikube 的机器上通过 minikubeip:NodePort 访问服务,现在我想从其他机器通过 LAN 访问该服务。我尝试过 Ingress 但它对我不起作用。
部署文件:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: aspnetapp-deployment
labels:
app: aspnetapp
spec:
replicas: 2
selector:
matchLabels:
app: aspnetapp
template:
metadata:
labels:
app: aspnetapp
spec:
containers:
- name: aspnetapp-cn
image: localhost:5000/aspnetapp
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
服务文件:
---
apiVersion: v1
kind: Service
metadata:
name: aspnetapp-service
spec:
type: NodePort
ports:
- name: http
targetport: 80
port: 80
protocol: TCP
selector:
app: aspnetapp
Run Code Online (Sandbox Code Playgroud)
入口文件:
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: …Run Code Online (Sandbox Code Playgroud) portforwarding kubernetes minikube kubernetes-ingress kubernetes-service
我正在尝试找到与如何在 Kubernetes 中删除(删除)注释 等效的 API ,以删除 Python 中服务类型的注释。从命令行执行此操作效果非常好。
最新的kubernetes-client/python没有任何允许修补注释的 API。我总是可以删除并重新创建该服务,但我想修补它。
如果有人愿意的话,这是一个简单的 MCVE。测试服务 YAML
apiVersion: v1
kind: Service
metadata:
name: my-service
annotations:
description: my test service
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
Run Code Online (Sandbox Code Playgroud)
和我正在使用的Python代码
from kubernetes import client, config
from kubernetes.client.rest import ApiException
config.load_kube_config()
coreV1 = client.CoreV1Api()
appsV1 = client.AppsV1Api()
try:
resp = coreV1.read_namespaced_service("my-service", "default")
del resp.metadata.annotations["description"]
patch = coreV1.patch_namespaced_service("my-service", "default", body=resp)
print(patch)
except ApiException as e:
print(str(e))
Run Code Online (Sandbox Code Playgroud) 在我们的 Kubernetes 集群中,我们使用多个内部 Kubernetes 服务端点。这些服务端点被多个客户端服务使用。
我们想检查是否有任何可以获取 kubernets 服务级别指标的请求计数、平均响应时间、状态代码聚合?
我已经使用以下命令在 k3s 集群中设置了服务:
apiVersion: v1
kind: Service
metadata:
name: myservice
namespace: mynamespace
labels:
app: myapp
spec:
type: LoadBalancer
selector:
app: myapp
ports:
- port: 9012
targetPort: 9011
protocol: TCP
Run Code Online (Sandbox Code Playgroud)
kubectl get svc -n mynamespace
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio ClusterIP None <none> 9011/TCP 42m
minio-service LoadBalancer 10.32.178.112 192.168.40.74,192.168.40.88,192.168.40.170 9012:32296/TCP 42m
Run Code Online (Sandbox Code Playgroud)
kubectl 描述 svc myservice -n mynamespace
Name: myservice
Namespace: mynamespace
Labels: app=myapp
Annotations: <none>
Selector: app=myapp
Type: LoadBalancer
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.32.178.112
IPs: …Run Code Online (Sandbox Code Playgroud) 以下示例将向外部公开服务。那么为什么在这种情况下被NodePort/LB允许,这不是多余的吗?
rules:
- host: lab.example.com
http:
paths:
- path: /service-root
backend:
serviceName: clusterip-svc
servicePort: 8080
- path: /service-one
backend:
serviceName: nodeport-svc
servicePort: 8080
- path: /service-two
backend:
serviceName: headless-svc
servicePort: 8080
Run Code Online (Sandbox Code Playgroud)
NodePort使用、ClusterIP、LoadBalancer或Headless作为 Ingress 后端有什么特别的优势吗?