有时候,部分服务没有迁移到集群中,下面方法可以定义集群访问外部服务:
方法1.定义外部服务地址:
$ cat ext-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: ext-svc
namespace: default
spec:
externalName: 192.168.5.86 #(也可以使用域名的方式xxx.test.com)
type: ExternalName
在pod访问外部服务(假设外部的服务是http协议):
$ kubectl exec -it curl-7cb5f8c5fc-499pv sh
# curl http://ext-svc/
方法2: 自定义endpoint地址(此方法,在endpoint中不能定义域名):
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 80
targetPort: 80
----
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: 218.244.142.131
ports:
- port: 80
在pod访问外部服务(假设外部的服务是http协议):
$ kubectl exec -it curl-7cb5f8c5fc-499pv sh
# curl http://my-service/
其他,在ingress中定义使用外部服务:
$ cat my-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/limit-rps: "300"
nginx.ingress.kubernetes.io/limit-whitelist: "192.168.5.0/24"
spec:
rules:
- host: my.test.com
http:
paths:
- path: /
backend:
serviceName: ext-svc
servicePort: 80 #假设外部服务的端口为80
参考:
https://kubernetes.io/zh/docs/concepts/services-networking/service/
https://kubernetes.io/docs/concepts/services-networking/service/#externalname
https://istio.io/zh/docs/reference/config/istio.networking.v1alpha3/#serviceentry
https://blog.csdn.net/weixin_34294649/article/details/91945626