Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Golang与Istio服务网格集成示例_创想鸟

Golang与Istio服务网格集成示例

首先将Golang应用部署到启用Istio Sidecar自动注入的Kubernetes命名空间,通过Docker镜像构建并应用Deployment和Service配置,Istio自动注入Envoy代理实现流量拦截;接着配置Gateway和VirtualService允许外部访问,无需修改代码即可实现流量管理、安全通信与可观测性。

golang与istio服务网格集成示例

将Golang应用与Istio服务网格集成,可以实现流量控制、服务发现、安全通信和可观测性等高级功能。Istio基于Envoy代理,通过Sidecar注入方式自动拦截服务间的网络通信,无需修改应用代码。下面以一个简单的Golang HTTP服务为例,展示如何在Kubernetes中与Istio集成。

1. 编写Golang微服务

创建一个简单的HTTP服务,提供REST接口:

package main

import ("fmt""log""net/http""os")

func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {host, _ := os.Hostname()fmt.Fprintf(w, "Hello from Go service! Host: %s\n", host)})

port := os.Getenv("PORT")if port == "" {    port = "8080"}log.Printf("Starting server on port %s", port)log.Fatal(http.ListenAndServe(":"+port, nil))

}

使用以下

go.mod

:

立即学习“go语言免费学习笔记(深入)”;

module go-service

go 1.21

2. 构建并推送Docker镜像

编写Dockerfile:

FROM golang:1.21-alpine AS builderWORKDIR /appCOPY . .RUN go mod downloadRUN go build -o main .

FROM alpine:latestRUN apk --no-cache add ca-certificatesWORKDIR /root/COPY --from=builder /app/main .CMD ["./main"]

构建并推送镜像:

docker build -t your-registry/go-service:v1 .docker push your-registry/go-service:v1

3. 部署到启用了Istio的Kubernetes集群

确保已安装Istio,并启用Sidecar自动注入。为命名空间开启注入:

kubectl create namespace go-appkubectl label namespace go-app istio-injection=enabled

编写Kubernetes部署和服务YAML:

apiVersion: apps/v1kind: Deploymentmetadata:  name: go-service  namespace: go-appspec:  replicas: 2  selector:    matchLabels:      app: go-service  template:    metadata:      labels:        app: go-service    spec:      containers:      - name: go-service        image: your-registry/go-service:v1        ports:        - containerPort: 8080---apiVersion: v1kind: Servicemetadata:  name: go-service  namespace: go-appspec:  selector:    app: go-service  ports:    - protocol: TCP      port: 80      targetPort: 8080

应用配置:

kubectl apply -f deployment.yaml

部署后,Istio会自动注入Envoy Sidecar容器,所有进出流量将被拦截并受Istio控制。

4. 配置Istio网关和虚拟服务

若需从外部访问服务,配置Gateway和VirtualService:

apiVersion: networking.istio.io/v1beta1kind: Gatewaymetadata:  name: go-gateway  namespace: go-appspec:  selector:    istio: ingressgateway  servers:  - port:      number: 80      name: http      protocol: HTTP    hosts:    - "*"---apiVersion: networking.istio.io/v1beta1kind: VirtualServicemetadata:  name: go-service-vs  namespace: go-appspec:  hosts:  - "*"  gateways:  - go-gateway  http:  - route:    - destination:        host: go-service        port:          number: 80

应用后,可通过Istio Ingress Gateway访问服务。

基本上就这些。Golang服务无需任何修改即可接入Istio,所有治理能力由服务网格提供。后续可进一步配置流量切分、熔断、mTLS和遥测收集等功能。

以上就是Golang与Istio服务网格集成示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1404016.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何在Golang中创建一个简单的HTTP客户端来调用外部API
上一篇 2025年12月15日 20:06:00
GolangWeb项目模板缓存与性能优化
下一篇 2025年12月15日 20:06:09

相关推荐

发表回复

登录后才能评论
关注微信