ene*_*enq 5 kubernetes kubernetes-ingress
我有以下豆荚hello-abc和hello-def。
我想从发送数据hello-abc到hello-def。
pod如何hello-abc知道的IP地址hello-def?
我想以编程方式执行此操作。
hello-abc找到位置的最简单方法是hello-def什么?
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-abc-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: hello-abc
spec:
containers:
- name: hello-abc
image: hello-abc:v0.0.1
imagePullPolicy: Always
args: ["/hello-abc"]
ports:
- containerPort: 5000
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-def-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: hello-def
spec:
containers:
- name: hello-def
image: hello-def:v0.0.1
imagePullPolicy: Always
args: ["/hello-def"]
ports:
- containerPort: 5001
---
apiVersion: v1
kind: Service
metadata:
name: hello-abc-service
spec:
ports:
- port: 80
targetPort: 5000
protocol: TCP
selector:
app: hello-abc
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
name: hello-def-service
spec:
ports:
- port: 80
targetPort: 5001
protocol: TCP
selector:
app: hello-def
type: NodePort
Run Code Online (Sandbox Code Playgroud)
前言
由于已经定义了路由到每个部署的服务,因此,如果您已将服务和部署都部署到了相同的名称空间,则在许多现代kubernetes群集中,您可以利用kube-dns并简单地按名称引用该服务。
不幸的是,如果kube-dns未在群集中进行配置(尽管不太可能),则无法按名称引用它。
您可以在此处阅读有关服务的DNS记录的更多信息
此外,Kubernetes具有“服务发现”功能,该功能可将服务的端口和ips公开到部署到相同名称空间的任何容器中。
解
这意味着,要达到hello-def,您可以像这样
curl http://hello-def-service:${HELLO_DEF_SERVICE_PORT}
基于服务发现https://kubernetes.io/docs/concepts/services-networking/service/#environment-variables
警告:如果Service端口更改,则很有可能只有在相同名称空间中更改后创建的Pod才会接收新的环境变量。
外部访问
另外,只要您可以从外部访问NodePort范围,就可以使用NodePort功能从外部获得此服务。
这将要求您通过node-ip:nodePort访问服务
您可以找到随机分配给您的服务的NodePort kubectl describe svc/hello-def-service
入口
要从外部获得服务,您应该实施一个入口服务,例如nginx-ingress
https://github.com/helm/charts/tree/master/stable/nginx-ingress https://github.com/kubernetes/ingress-nginx
边车
如果您的2个服务紧密耦合,则可以使用Kubernetes Sidecar功能将这两个服务都包含在同一个容器中。在这种情况下,pod中的两个容器将共享相同的虚拟网络适配器,并且可以通过以下方式访问localhost:$port
https://kubernetes.io/docs/concepts/workloads/pods/pod/#uses-of-pods
服务发现
当Pod在节点上运行时,kubelet为每个活动的Service添加一组环境变量。它既支持Docker链接兼容变量(请参阅makeLinkVariables),也支持更简单的{SVCNAME} _SERVICE_HOST和{SVCNAME} _SERVICE_PORT变量,其中服务名称为大写字母,并且破折号转换为下划线。
在此处阅读有关服务发现的更多信息:https : //kubernetes.io/docs/concepts/services-networking/service/#environment-variables
| 归档时间: |
|
| 查看次数: |
3130 次 |
| 最近记录: |